public function vvmManagementAction()
 {
     $form = new Form_VvmManagement();
     if ($this->_request->isPost()) {
         $product_id = $this->_request->getPost('product');
         $batch_id = $this->_request->getPost('batch');
         $msg = '';
         $em = Zend_Registry::get('doctrine');
         $em->getConnection()->beginTransaction();
         try {
             $quantity = $this->_request->quantity;
             $newvvm = $this->_request->newvvm;
             foreach ($quantity as $key => $value) {
                 if (!empty($value) && $value > 0) {
                     $updatedqty = $value;
                     list($batchid, $vvmid, $locationid) = explode("_", $key);
                     $batch_detail = $this->_em->getRepository("StockBatch")->find($batchid);
                     $placement = new Model_Placements();
                     $placement->form_values = array('quantity' => "-" . $updatedqty, 'placement_loc_id' => $locationid, 'batch_id' => $batchid, 'placement_loc_type_id' => 116, 'user_id' => $this->_userid, 'created_date' => date("Y-m-d"), 'vvmstage' => $vvmid, 'is_placed' => 0);
                     $placement->add();
                     $placement->form_values = array('quantity' => $updatedqty, 'placement_loc_id' => $locationid, 'batch_id' => $batchid, 'placement_loc_type_id' => 116, 'user_id' => $this->_userid, 'created_date' => date("Y-m-d"), 'vvmstage' => $newvvm[$key], 'is_placed' => 1);
                     $placement->add();
                     //Log Entry START
                     $history = new VvmTransferHistory();
                     $from_to_batch = $this->_em->getRepository("StockBatch")->find($batchid);
                     $history->setBatch($from_to_batch);
                     $from_vvmstages = $this->_em->getRepository("VvmStages")->find($vvmid);
                     $history->setFromVvmStage($from_vvmstages);
                     $to_vvmstages = $this->_em->getRepository("VvmStages")->find($newvvm[$key]);
                     $history->setToVvmStage($to_vvmstages);
                     $created_by = $this->_em->getRepository("Users")->find($this->_userid);
                     $history->setCreatedBy($created_by);
                     $history->setCreatedDate(new DateTime(date("Y-m-d")));
                     $history->setQuantity(ABS($updatedqty));
                     $this->_em->persist($history);
                     $this->_em->flush();
                     //Log Entry END
                     $msg = 'VVM has been changed successfully!';
                     $product_id = $batch_detail->getItemPackSize()->getPkId();
                     $batch_id = $batchid;
                 }
             }
             $location = new Model_Locations();
             $this->view->result = $location->getBatchVvmLocations($batch_id);
             $form->product->setValue($product_id);
             $this->view->batch = $batch_id;
             $em->getConnection()->commit();
         } catch (Exception $e) {
             $em->getConnection()->rollback();
             $em->close();
             App_FileLogger::info($e);
         }
         $stock_detail = new Model_StockDetail();
         $this->view->h_result = $stock_detail->getVvmTransferHistory($product_id);
     }
     $this->view->form = $form;
     $this->view->msg = $msg;
 }
 public function uploadTransactionsAction()
 {
     try {
         $data = array();
         $data['quantity'] = $this->_request->getParam('qty');
         $data['placement_loc_id'] = $this->_request->getParam('placement_loc_id');
         $data['placement_loc_type_id'] = $this->_request->getParam('placement_loc_type_id');
         $data['batch_id'] = $this->_request->getParam('batch_id');
         $data['detail_id'] = $this->_request->getParam('detail_id');
         $data['created_date'] = $this->_request->getParam('created_date');
         $data['user_id'] = $this->_request->getParam('user_id');
         $data['vvmstage'] = $this->_request->getParam('vvmstage');
         $placement = new Model_Placements();
         $placement->form_values = $data;
         $result[]['id'] = $placement->add();
     } catch (OptimisticLockException $e) {
         App_FileLogger::info($e);
         $result[]['message'] = "Failed";
     }
     echo Zend_Json::encode($result);
 }
 public function addStockDetail($array)
 {
     //$em = Zend_Registry::get('doctrine');
     $action = Zend_Registry::get("action");
     if ($array['rcvedit'] == "Yes") {
         $stock_detail = $this->_em->getRepository("StockDetail")->find($array['stock_detail_id']);
     } else {
         $stock_detail = new StockDetail();
     }
     $type = $array['transaction_type_id'];
     $type1 = $type;
     if (!empty($array['hdn_stock_id'])) {
         $stock_id = $array['hdn_stock_id'];
     } else {
         $stock_id = $array['stock_master_id'];
     }
     $stock_master_id = $this->_em->getRepository('StockMaster')->find($stock_id);
     $stock_detail->setStockMaster($stock_master_id);
     if (!empty($array['item_unit_id'])) {
         $item_unit_id = $this->_em->getRepository('ItemUnits')->find($array['item_unit_id']);
         $stock_detail->setItemUnit($item_unit_id);
     }
     if ($array['type'] != 's') {
         $stock_detail->setTemporary(1);
     }
     $quantity = str_replace(",", "", $array['quantity']);
     if ($action == 'issue') {
         list($location, $vvm, $placd_qty) = explode("|", $array['vvm_stage']);
         if ($vvm == 0) {
             $array['vvm_stage'] = 0;
         } else {
             if (!empty($vvm)) {
                 $array['vvm_stage'] = $vvm;
             } else {
                 $array['vvm_stage'] = $location;
             }
         }
         if ($quantity > $placd_qty) {
             throw new Exception('PLCD_QTY_GREATER_THAN_ISSUE_QTY');
         }
     }
     $vvms = $this->_em->getRepository("VvmStages")->find($array['vvm_stage']);
     $stock_detail->setVvmStage($vvms);
     //$type = $array['transaction_type_id'];
     if ($type == Model_TransactionTypes::TRANSACTION_ISSUE) {
         $quantity = "-" . $quantity;
     }
     $stock_detail->setQuantity($quantity);
     $stock_detail->setAdjustmentType("{$type}");
     //$stock_detail->setStakeholderItem($array['manufacturer_id']);
     if ($type == 1) {
         $str_sql = $this->_em->createQueryBuilder()->select("sbw.pkId")->from('StockBatchWarehouses', 'sbw')->join('sbw.stockBatch', 'sb')->join('sb.packInfo', 'pi')->join('pi.stakeholderItemPackSize', 'sip')->where("sip.itemPackSize = '" . $array['item_id'] . "' ")->andWhere("sb.number = '" . $array['number'] . "'  ")->andWhere("sbw.warehouse =  '" . $this->_identity->getWarehouseId() . "' ");
         //this IF is for stock receive
         $row = $str_sql->getQuery()->getResult();
         //            $stock_batch_id = $this->_em->getRepository('StockBatch')->find(
         //                    array('number' => $array['number'],
         //                        'itemPackSize' => $array['item_id'],
         //                        'warehouse' => $this->_identity->getWarehouseId())
         //            );
         // echo $stock_batch_id->getPkId();
         // exit;
         // App_Controller_Functions::pr($stock_batch_id);
         $stock_batch_id = $this->_em->getRepository('StockBatchWarehouses')->find($row['0']['pkId']);
         $stock_detail->setStockBatchWarehouse($stock_batch_id);
         $stock_detail->setIsReceived(1);
     } else {
         if ($type == 2) {
             //this ELSE IF is for stock issue
             $stock_batch_id = $this->_em->getRepository('StockBatchWarehouses')->find($array['stock_batch_id']);
             $stock_detail->setStockBatchWarehouse($stock_batch_id);
             $stock_detail->setIsReceived(0);
         }
     }
     $created_by = $this->_em->getRepository('Users')->find($this->_user_id);
     $stock_detail->setModifiedBy($created_by);
     $stock_detail->setModifiedDate(App_Tools_Time::now());
     $stock_detail->setCreatedBy($created_by);
     $stock_detail->setCreatedDate(App_Tools_Time::now());
     $this->_em->persist($stock_detail);
     $this->_em->flush();
     //$stock_batch = new Model_StockBatch();
     //$stock_batch->adjustQuantityByWarehouse($stock_batch_id->getPkId());
     if ($action == 'issue' && !empty($location)) {
         $placements = new Model_Placements();
         $placements->form_values['placement_loc_id'] = $location;
         $placements->form_values['batch_id'] = $array['number'];
         $placements->form_values['vvmstage'] = $vvm;
         $placements->form_values['is_placed'] = 1;
         $placements->form_values['quantity'] = $quantity;
         $placements->form_values['placement_loc_type_id'] = 115;
         $placements->form_values['detail_id'] = $stock_detail->getPkId();
         $placements->form_values['user_id'] = $this->_user_id;
         $placements->form_values['created_date'] = date("Y-m-d");
         $placements->add();
     }
     return $stock_detail->getPkId();
 }
 public function addStockWarehouseByIssue()
 {
     if (!empty($this->form_values['wh_id'])) {
         $wh_id = $this->form_values['wh_id'];
     } else {
         $wh_id = $this->_identity->getWarehouseId();
     }
     $created_by = $this->_em->getRepository('Users')->find($this->_user_id);
     $tranaction_type = new Model_TransactionTypes();
     $arr_types = $tranaction_type->getAll();
     $array_types = array();
     foreach ($arr_types as $arrtype) {
         $array_types[$arrtype['pkId']] = $arrtype['nature'];
     }
     if (isset($this->form_values['stock_id']) && !empty($this->form_values['stock_id'])) {
         $stock_id = $this->form_values['stock_id'];
         $stock_detail = new Model_StockDetail();
         $stock_detail->pkId = $stock_id;
         $stock_detail_result = $stock_detail->findbyStockId();
         $type_id = 1;
         if (isset($this->form_values['remarks']) && !empty($this->form_values['remarks'])) {
             $remarks = $this->form_values['remarks'];
         }
         if (isset($this->form_values['issue_no']) && !empty($this->form_values['issue_no'])) {
             $issue_no = $this->form_values['issue_no'];
         }
         if (isset($this->form_values['count']) && !empty($this->form_values['count'])) {
             $count_o = $this->form_values['count'];
         }
         if (isset($this->form_values['rec_date']) && !empty($this->form_values['rec_date'])) {
             $rec_date = $this->form_values['rec_date'];
         }
         if (isset($this->form_values['rec_ref']) && !empty($this->form_values['rec_ref'])) {
             $rec_ref = $this->form_values['rec_ref'];
         }
         if (isset($this->form_values['vvmstage']) && !empty($this->form_values['vvmstage'])) {
             $vvmstage = $this->form_values['vvmstage'];
         }
         if (isset($this->form_values['locations']) && !empty($this->form_values['locations'])) {
             $locations = $this->form_values['locations'];
         }
         if (count($stock_detail_result) > 0) {
             $stock_master = new StockMaster();
             $time_arr = explode(' ', $rec_date);
             $time = date('H:i:s', strtotime($time_arr[1] . $time_arr[2]));
             $stock_master->setTransactionDate(new \DateTime(App_Controller_Functions::dateToDbFormat($time_arr[0]) . ' ' . $time));
             $tran_type = $this->_em->getRepository('TransactionTypes')->find($type_id);
             $stock_master->setTransactionType($tran_type);
             $stock_master->setTransactionReference($rec_ref);
             $from_warehouse_id = $this->_em->getRepository('Warehouses')->find($stock_detail_result[0]['fromWarehouse']);
             $stock_master->setFromWarehouse($from_warehouse_id);
             $warehouse_id = $this->_em->getRepository('Warehouses')->find($wh_id);
             $stock_master->setToWarehouse($warehouse_id);
             $stock_master->setCreatedBy($created_by);
             $stock_master->setModifiedBy($created_by);
             $stock_master->setCreatedDate(App_Tools_Time::now());
             $stock_master->setModifiedDate(App_Tools_Time::now());
             $stock_master->setComments($remarks);
             $trans_no = $this->getTransactionNumber(1, $rec_date);
             $stock_master->setTransactionNumber($trans_no['trans_no']);
             if (!empty($stock_detail_result[0]['stakeholderActivity'])) {
                 $stakeholder_activity = $this->_em->getRepository('StakeholderActivities')->find($stock_detail_result[0]['stakeholderActivity']);
                 $stock_master->setStakeholderActivity($stakeholder_activity);
             }
             $stock_master->setDraft(0);
             $stock_master->setTransactionCounter($trans_no['id']);
             $stock_master->setParentId(0);
             $this->_em->persist($stock_master);
             $this->_em->flush();
             $fk_stock_ID = $stock_master->getPkId();
         }
     }
     if (isset($this->form_values['stockid']) && !empty($this->form_values['stockid'])) {
         $stock_ids = $this->form_values['stockid'];
         $count_stock_ids = count($stock_ids);
         foreach ($stock_ids as $index => $detail_id) {
             $stock_detail = new Model_StockDetail();
             $stock_detail->stockReceived($detail_id);
             $stockBatch = $stock_detail->GetBatchDetail($detail_id);
             $stockDetail = $stock_detail->findByDetailId($detail_id);
             $array_missing = $this->form_values['missing'];
             $quantity = ABS($stockBatch['0']['quantity']);
             $obj_stock_batch = new Model_StockBatch();
             $product_id = $stockBatch['0']['itemPackSize'];
             $array = array('number' => $stockBatch['0']['number'], 'item_id' => $product_id);
             $batch_id1 = $obj_stock_batch->checkBatch($array);
             if ($batch_id1 === 0) {
                 $stock_batch = new StockBatch();
                 $stock_batch->setNumber(strtoupper($stockBatch['0']['number']));
                 $stock_batch->setExpiryDate(new \DateTime($stockBatch[0]['expiryDate']));
                 $stock_batch->setUnitPrice($stockBatch['0']['unitPrice']);
                 $stock_batch->setProductionDate(new \DateTime($stockBatch[0]['productionDate']));
                 if (!empty($stockBatch['0']['stakeholderItemPackSize'])) {
                     $pack_info_id = $this->_em->getRepository('PackInfo')->findOneBy(array("stakeholderItemPackSize" => $stockBatch['0']['stakeholderItemPackSize']));
                     $stock_batch->setPackInfo($pack_info_id);
                 }
                 if (!empty($stockBatch['0']['vvmType'])) {
                     $vvm_id = $this->_em->getRepository('VvmTypes')->find($stockBatch['0']['vvmType']);
                     $stock_batch->setVvmType($vvm_id);
                 }
                 $stock_batch->setModifiedBy($created_by);
                 $stock_batch->setModifiedDate(App_Tools_Time::now());
                 $stock_batch->setCreatedBy($created_by);
                 $stock_batch->setCreatedDate(App_Tools_Time::now());
                 $this->_em->persist($stock_batch);
                 $this->_em->flush();
                 $batch_id2 = $stock_batch->getPkId();
                 $stock_batch_warehouses = new StockBatchWarehouses();
                 $stock_batch_warehouses->setQuantity($quantity);
                 $stock_batch_warehouses->setStatus(Model_StockBatch::STACKED);
                 $warehouse_id = $this->_em->getRepository('Warehouses')->find($wh_id);
                 $stock_batch_warehouses->setWarehouse($warehouse_id);
                 $stock_batch_id = $this->_em->getRepository('StockBatch')->find($batch_id2);
                 $stock_batch_warehouses->setStockBatch($stock_batch_id);
                 $stock_batch_warehouses->setModifiedBy($created_by);
                 $stock_batch_warehouses->setModifiedDate(App_Tools_Time::now());
                 $stock_batch_warehouses->setCreatedBy($created_by);
                 $stock_batch_warehouses->setCreatedDate(App_Tools_Time::now());
                 $this->_em->persist($stock_batch_warehouses);
                 $this->_em->flush();
                 $batch_id1 = $stock_batch_warehouses->getPkId();
             }
             $stock_detail = new StockDetail();
             $sm_id = $this->_em->getRepository('StockMaster')->find($fk_stock_ID);
             $stock_detail->setStockMaster($sm_id);
             $sb_id = $this->_em->getRepository('StockBatchWarehouses')->find($batch_id1);
             $stock_detail->setStockBatchWarehouse($sb_id);
             $iu_id = $this->_em->getRepository('ItemUnits')->find($stockDetail['0']['itemUnit']);
             $stock_detail->setItemUnit($iu_id);
             $stock_detail->setQuantity($array_types[$type_id] . $quantity);
             $stock_detail->setTemporary(0);
             $vvms = $this->_em->getRepository("VvmStages")->find($vvmstage[$index]);
             $stock_detail->setVvmStage($vvms);
             $stock_detail->setIsReceived($detail_id);
             $stock_detail->setAdjustmentType($type_id);
             $stock_detail->setModifiedBy($created_by);
             $stock_detail->setModifiedDate(App_Tools_Time::now());
             $stock_detail->setCreatedBy($created_by);
             $stock_detail->setCreatedDate(App_Tools_Time::now());
             $this->_em->persist($stock_detail);
             $this->_em->flush();
             $adj_stock_detail_id = $stock_detail->getPkId();
             if (!empty($locations[$index])) {
                 $placement = new Model_Placements();
                 $placement->form_values = array('vvmstage' => $vvmstage[$index], 'is_placed' => 1, 'quantity' => $array_types[$type_id] . $quantity, 'placement_loc_type_id' => 114, 'placement_loc_id' => $locations[$index], 'batch_id' => $batch_id1, 'detail_id' => $stock_detail->getPkId(), 'user_id' => $this->_user_id, 'created_date' => date("Y-m-d"));
                 $placement->add();
             }
             if (isset($array_missing[$index]) && !empty($array_missing[$index])) {
                 $type = $this->form_values['types'];
                 $stock_detail = new Model_StockDetail();
                 $stockDetail = $stock_detail->findByDetailId($detail_id);
                 if (count($stockDetail) > 0) {
                     $stock_master = new StockMaster();
                     $stock_master->setTransactionDate(new \DateTime(App_Controller_Functions::dateToDbFormat($rec_date)));
                     $tran_type1 = $this->_em->getRepository('TransactionTypes')->find($type[$index]);
                     $stock_master->setTransactionType($tran_type1);
                     //$type_id;
                     $stock_master->setTransactionReference($rec_ref);
                     $warehouse_id = $this->_em->getRepository('Warehouses')->find($wh_id);
                     $stock_master->setFromWarehouse($warehouse_id);
                     $stock_master->setToWarehouse($warehouse_id);
                     $stock_master->setCreatedBy($created_by);
                     $stock_master->setModifiedBy($created_by);
                     $stock_master->setCreatedDate(App_Tools_Time::now());
                     $stock_master->setModifiedDate(App_Tools_Time::now());
                     $stock_master->setComments($remarks);
                     $trans_no = $this->getTransactionNumber($type[$index], $rec_date);
                     $stock_master->setTransactionNumber($trans_no['trans_no']);
                     $stock_master->setDraft(0);
                     $stock_master->setTransactionCounter($trans_no['id']);
                     $stock_master->setParentId($fk_stock_ID);
                     $this->_em->persist($stock_master);
                     $this->_em->flush();
                     $stock_id = $stock_master->getPkId();
                 }
                 $stock_detail_a = new StockDetail();
                 $s_id = $this->_em->getRepository('StockMaster')->find($stock_id);
                 $stock_detail_a->setStockMaster($s_id);
                 $sb_id = $this->_em->getRepository('StockBatchWarehouses')->find($batch_id1);
                 $stock_detail_a->setStockBatchWarehouse($sb_id);
                 $iu_id = $this->_em->getRepository('ItemUnits')->find($stockDetail['0']['itemUnit']);
                 $stock_detail_a->setItemUnit($iu_id);
                 $stock_detail_a->setQuantity($array_types[$type[$index]] . $array_missing[$index]);
                 $stock_detail_a->setAdjustmentType($type[$index]);
                 $stock_detail_a->setTemporary(0);
                 $stock_detail_a->setIsReceived($adj_stock_detail_id);
                 $vvms = $this->_em->getRepository("VvmStages")->find($vvmstage[$index]);
                 $stock_detail_a->setVvmStage($vvms);
                 $stock_detail_a->setCreatedBy($created_by);
                 $stock_detail_a->setModifiedBy($created_by);
                 $stock_detail_a->setCreatedDate(App_Tools_Time::now());
                 $stock_detail_a->setModifiedDate(App_Tools_Time::now());
                 $this->_em->persist($stock_detail_a);
                 $this->_em->flush();
                 if (!empty($locations[$index])) {
                     $placement2 = new Model_Placements();
                     $placement2->form_values = array('vvmstage' => $vvmstage[$index], 'is_placed' => 0, 'quantity' => $array_types[$type[$index]] . $array_missing[$index], 'placement_loc_type_id' => 115, 'placement_loc_id' => $locations[$index], 'batch_id' => $batch_id1, 'detail_id' => $stock_detail_a->getPkId(), 'user_id' => $this->_user_id, 'created_date' => date("Y-m-d"));
                     $placement2->add();
                 }
             }
             $obj_stock_batch->adjustQuantityByWarehouse($batch_id1);
             $obj_stock_batch->autoRunningLEFOBatch($product_id);
         }
     }
     $warehouse_data = new Model_HfDataMaster();
     $warehouse_data->addReport($stock_id, 1, 'wh');
     return true;
 }
 public function addStockDetail($array)
 {
     $em = Zend_Registry::get('doctrine');
     $action = Zend_Registry::get("action");
     if ($array['rcvedit'] == "Yes") {
         $stock_detail = $this->_em->getRepository("StockDetail")->find($array['stock_detail_id']);
     } else {
         $stock_detail = new StockDetail();
     }
     $type = $array['transaction_type_id'];
     $type1 = $type;
     if (!empty($array['hdn_stock_id'])) {
         $stock_id = $array['hdn_stock_id'];
     } else {
         $stock_id = $array['stock_master_id'];
     }
     $stock_master_id = $this->_em->getRepository('StockMaster')->find($stock_id);
     $stock_detail->setStockMaster($stock_master_id);
     if (!empty($array['item_unit_id'])) {
         $item_unit_id = $this->_em->getRepository('ItemUnits')->find($array['item_unit_id']);
         $stock_detail->setItemUnit($item_unit_id);
     }
     if ($array['type'] != 's') {
         $stock_detail->setTemporary(1);
     }
     $quantity = str_replace(",", "", $array['quantity']);
     if ($action == 'issue') {
         list($location, $vvm, $placd_qty) = explode("|", $array['vvm_stage']);
         if ($vvm == 0) {
             $array['vvm_stage'] = 0;
         } else {
             if (!empty($vvm)) {
                 $array['vvm_stage'] = $vvm;
             } else {
                 $array['vvm_stage'] = $location;
             }
         }
         if ($quantity > $placd_qty) {
             throw new Exception('PLCD_QTY_GREATER_THAN_ISSUE_QTY');
         }
     }
     $vvms = $this->_em->getRepository("VvmStages")->find($array['vvm_stage']);
     $stock_detail->setVvmStage($vvms);
     //$type = $array['transaction_type_id'];
     if ($type == Model_TransactionTypes::TRANSACTION_ISSUE) {
         $quantity = "-" . $quantity;
     }
     $stock_detail->setQuantity($quantity);
     $stock_detail->setAdjustmentType("{$type}");
     //$stock_detail->setStakeholderItem($array['manufacturer_id']);
     if ($type == 1) {
         //this IF is for stock receive
         $stock_batch_id = $this->_em->getRepository('StockBatch')->find(array('number' => $array['number'], 'itemPackSize' => $array['item_id'], 'warehouse' => $this->_identity->getWarehouseId()));
         // echo $stock_batch_id->getPkId();
         // exit;
         // App_Controller_Functions::pr($stock_batch_id);
         $stock_detail->setStockBatch($stock_batch_id);
         $stock_detail->setIsReceived(1);
     } else {
         if ($type == 2) {
             //this ELSE IF is for stock issue
             $stock_batch_id = $this->_em->getRepository('StockBatch')->find($array['stock_batch_id']);
             $stock_detail->setStockBatch($stock_batch_id);
             $stock_detail->setIsReceived(0);
         }
     }
     $this->_em->persist($stock_detail);
     $this->_em->flush();
     $query = "SELECT AdjustQty(" . $stock_batch_id->getPkId() . "," . $this->_identity->getWarehouseId() . ") FROM DUAL";
     $str_sql = $em->getConnection()->prepare($query);
     $str_sql->execute();
     if ($action == 'issue' && !empty($location)) {
         $placements = new Model_Placements();
         $placements->form_values['placement_loc_id'] = $location;
         $placements->form_values['batch_id'] = $array['number'];
         $placements->form_values['vvmstage'] = $vvm;
         $placements->form_values['is_placed'] = 1;
         $placements->form_values['quantity'] = $quantity;
         $placements->form_values['placement_loc_type_id'] = 115;
         $placements->form_values['detail_id'] = $stock_detail->getPkId();
         $placements->form_values['user_id'] = $this->_user_id;
         $placements->form_values['created_date'] = date("Y-m-d");
         $placements->add();
     }
     return $stock_detail->getPkId();
 }