/** Scan prodUpdate from price changes and log them in prodPriceHistory @param $dbc [SQLManager] db connection @param $offset [optional int] start scanning from this prodUpdateID */ private function scanPriceChanges($dbc, $offset = 0) { $prodUpdateQ = 'SELECT prodUpdateID FROM prodUpdate '; $args = array(); if ($offset > 0) { $prodUpdateQ .= ' WHERE prodUpdateID > ? '; $args[] = $offset; } $prodUpdateQ .= ' ORDER BY upc, modified'; $prodUpdateP = $dbc->prepare($prodUpdateQ); $prodUpdateR = $dbc->execute($prodUpdateP, $args); $chkP = $dbc->prepare("SELECT modified,price FROM\n prodPriceHistory WHERE upc=?\n ORDER BY modified DESC"); $upc = null; $prevPrice = null; $update = new ProdUpdateModel($dbc); $history = new ProdPriceHistoryModel($dbc); /** Go through changes to each UPC in order When encountering a new UPC, lookup previous price (if any) from prodPriceHistory Only create new entries when the prodUpdate record's price does not match the previous price. */ while ($prodUpdateW = $dbc->fetch_row($prodUpdateR)) { $update->reset(); $update->prodUpdateID($prodUpdateW['prodUpdateID']); $update->load(); if ($upc === null || $upc != $update->upc()) { $upc = $update->upc(); $prevPrice = null; $chkR = $dbc->execute($chkP, array($upc)); if ($dbc->num_rows($chkR) > 0) { $chkW = $dbc->fetch_row($chkR); $prevPrice = $chkW['price']; } } if ($prevPrice != $update->price()) { $history->reset(); $history->upc($upc); $history->storeID($update->storeID()); $history->modified($update->modified()); $history->price($update->price()); $history->uid($update->user()); $history->prodUpdateID($update->prodUpdateID()); $history->save(); $this->cronMsg('Add price change #' . $update->prodUpdateID(), FannieLogger::INFO); } $prevPrice = $update->price(); } }