public function generateRequisitionAction() { $restocks = RestockQuery::create()->find(); if (!$restocks->isEmpty()) { $restockEntries = RestockEntryQuery::create()->whereAdd(RestockEntry::ID_RESTOCK, $restocks->current()->getIdRestock(), RestockQuery::EQUAL)->find(); if (!$restockEntries->isEmpty()) { $products = ProductQuery::create()->whereAdd(Product::ITEM_CODE, $restockEntries->getDistinctProducts(), ProductQuery::IN)->find(); $currencies = CurrencyQuery::create()->find(); $exchangeRates = CurrencyExchangeQuery::create()->find(); $restockFinalResultManager = new RestockFinalResultsManager($restockEntries, $products); try { $this->getRequisitionCatalog()->beginTransaction(); $requisition = RequisitionFactory::createFromArray(array(Requisition::ID_DESTINATION_COUNTRY => Country::$defaultIdCountry, Requisition::TYPE => Requisition::$Type["Weekly"], Requisition::STATUS => Requisition::$Status["New"], Requisition::NUM_REQUISITION => "Weekly Restock.")); $this->getRequisitionCatalog()->create($requisition); while ($restockEntries->valid()) { $restockEntry = $restockEntries->read(); if ($restockEntry->isChecked()) { $quantity = $restockFinalResultManager->getTotalCartonsByIdRestockEntry($restockEntry->getIdRestockEntry()); if ($quantity > 0) { $product = $products->getByPK($restockEntry->getIdProduct()); $requisitionEntry = RequisitionEntryFactory::createFromArray(array(RequisitionEntry::ID_REQUISITION => $requisition->getIdRequisition(), RequisitionEntry::ID_PRODUCT => $product->getItemCode(), RequisitionEntry::PRICE => $restockEntry->getMinTargetPrice() * $exchangeRates->getByFromAndTo(Currency::$defaultCurrency, $product->getCurrency())->getRate(), RequisitionEntry::ID_CURRENCY => $product->getCurrency(), RequisitionEntry::ID_SUPPLIER_DEFAULT => $product->getIdSupplier(), RequisitionEntry::QUANTITY => $quantity, RequisitionEntry::STATUS => RequisitionEntry::$Status["New"])); $this->getRequisitionEntryCatalog()->create($requisitionEntry); } } } $this->getRestockEntryCatalog()->truncate(); $this->getRestockCatalog()->truncate(); $this->getRequisitionCatalog()->commit(); $this->setFlash('ok', $this->i18n->_("Requisition was saved with folio {$requisition->getIdRequisition()}")); } catch (Exception $e) { $this->getRequisitionCatalog()->rollBack(); $this->setFlash('error', $this->i18n->_($e->getMessage())); } } } $this->_redirect('requisition/list'); }
/** * * makeBean * @param array $resultset * @return \Application\Model\Bean\RequisitionEntry */ protected function makeBean($resultset) { return RequisitionEntryFactory::createFromArray($resultset); }
/** * * @return array */ public function updateAction() { if ($this->getRequest()->isPost()) { $params = $this->getRequest()->getParams(); // Get params to update requisition $requistionParams[Requisition::ID_REQUISITION] = $this->getRequest()->getParam(Requisition::ID_REQUISITION); $requistionParams[Requisition::NUM_REQUISITION] = $this->getRequest()->getParam(Requisition::NUM_REQUISITION, ""); $requistionParams[Requisition::FOLIO_PROYECTO_ESPECIAL] = $this->getRequest()->getParam(Requisition::FOLIO_PROYECTO_ESPECIAL, ""); $requistionParams[Requisition::FECHA_PROMESA_ENTREGA] = $this->getRequest()->getParam(Requisition::FECHA_PROMESA_ENTREGA, ""); $requistionParams[Requisition::PROYECTO_ESPECIAL] = $this->getRequest()->getParam(Requisition::PROYECTO_ESPECIAL, ""); $requistionParams[Requisition::COMMENT] = $this->getRequest()->getParam(Requisition::COMMENT, null); $requistionParams[Requisition::ID_DESTINATION_COUNTRY] = $this->getRequest()->getParam(Requisition::ID_DESTINATION_COUNTRY); // Get Params and complete the default info to save the requisition Entry $requistionEntries = $this->getRequest()->getParam("entries"); // Search the requisition will be update $requisition = RequisitionQuery::create()->findByPKOrThrow($requistionParams[Requisition::ID_REQUISITION], $this->i18n->_("The Requisition with id {$requistionParams[Requisition::ID_REQUISITION]} does not exist.")); //print_r($requisition); //exit; try { // Compare and change distinct data in bean and update in database $this->getRequisitionCatalog()->beginTransaction(); RequisitionFactory::populate($requisition, $requistionParams); $this->getRequisitionCatalog()->update($requisition); $this->newLogForUpdate($requisition); // Excecute the appropriate action depending on the itemStatus foreach ($requistionEntries as $requisitionEntryParams) { // If itemStatus is add then create a new requisition entry in database if ($requisitionEntryParams["itemStatus"] == "add") { $requisitionEntry = RequisitionEntryFactory::createFromArray(array(RequisitionEntry::ID_REQUISITION => $requisition->getIdRequisition(), RequisitionEntry::ID_PRODUCT => $requisitionEntryParams[RequisitionEntry::ID_PRODUCT], RequisitionEntry::ID_SUPPLIER_DEFAULT => $requisitionEntryParams[RequisitionEntry::ID_SUPPLIER_DEFAULT] == "" ? Null : $requisitionEntryParams[RequisitionEntry::ID_SUPPLIER_DEFAULT], RequisitionEntry::ID_CURRENCY => $requisitionEntryParams[RequisitionEntry::ID_CURRENCY], RequisitionEntry::QUANTITY => $requisitionEntryParams[RequisitionEntry::QUANTITY], RequisitionEntry::PRICE => $requisitionEntryParams[RequisitionEntry::PRICE], RequisitionEntry::COMMENTS => $requisitionEntryParams[RequisitionEntry::COMMENTS], RequisitionEntry::STATUS => RequisitionEntry::$Status["New"])); $this->getRequisitionEntryCatalog()->create($requisitionEntry); // If itemStatus is remove then remove the requisition entry from database } else { if ($requisitionEntryParams["itemStatus"] == "remove") { $this->getRequisitionEntryCatalog()->deleteById($requisitionEntryParams[RequisitionEntry::ID_REQUISITION_ENTRY]); // If itemStatus is change then update the requisition entry in database } else { if ($requisitionEntryParams["itemStatus"] == "change") { // Search the requisition entry in database $requisitionEntry = RequisitionEntryQuery::create()->findByPKOrThrow($requisitionEntryParams[RequisitionEntry::ID_REQUISITION_ENTRY], $this->i18n->_("The Requisition Entry with id {$requisitionEntryParams[RequisitionEntry::ID_REQUISITION_ENTRY]} does not exist")); // Compare the new info, change the differences and update the requisition entry in database RequisitionEntryFactory::populate($requisitionEntry, array(RequisitionEntry::ID_REQUISITION => $requisition->getIdRequisition(), RequisitionEntry::ID_PRODUCT => $requisitionEntryParams[RequisitionEntry::ID_PRODUCT], RequisitionEntry::ID_SUPPLIER_DEFAULT => $requisitionEntryParams[RequisitionEntry::ID_SUPPLIER_DEFAULT] == "" ? Null : $requisitionEntryParams[RequisitionEntry::ID_SUPPLIER_DEFAULT], RequisitionEntry::ID_CURRENCY => $requisitionEntryParams[RequisitionEntry::ID_CURRENCY], RequisitionEntry::QUANTITY => $requisitionEntryParams[RequisitionEntry::QUANTITY], RequisitionEntry::PRICE => $requisitionEntryParams[RequisitionEntry::PRICE], RequisitionEntry::COMMENTS => $requisitionEntryParams[RequisitionEntry::COMMENTS])); $this->getRequisitionEntryCatalog()->update($requisitionEntry); } } } } // Coomit all changes in database and set a confirmation message $this->getRequisitionCatalog()->commit(); $this->setFlash('ok', $this->i18n->_("The Requisition with folio {$requisition->getIdRequisition()} was updated correctly.")); } catch (Exception $e) { // If something goes wrong then revert all changes in database and set a error status $this->getRequisitionCatalog()->rollBack(); $this->setFlash('error', $this->i18n->_($e->getMessage())); } } $this->_redirect('requisition/list'); }