public function substitute()
 {
     $flash = Flash::Instance();
     $db = DB::Instance();
     $db->StartTrans();
     $errors = array();
     $timestamp = strtotime(fix_date($this->_data[$this->modeltype]['start_date']));
     // 86400 = 24 hours
     $timestamp -= 86400;
     $data = array('id' => $this->_data[$this->modeltype]['current_structure_id'], 'end_date' => date(DATE_FORMAT, $timestamp));
     $current_structure = MFStructure::Factory($data, $errors, $this->modeltype);
     if (count($errors) > 0 || !$current_structure->save()) {
         $errors[] = 'Could not remove current structure';
         $db->FailTrans();
     }
     if ($this->_data[$this->modeltype]['qty'] <= 0) {
         $errors['qty'] = 'Quantity must be greater than zero';
         $db->FailTrans();
     }
     if (count($errors) == 0) {
         if (parent::save($this->modeltype)) {
             $stitem = DataObjectFactory::Factory('STItem');
             if ($stitem->load($this->saved_model->ststructure_id)) {
                 //$stitem->calcLatestCost();
                 if (!$stitem->rollUp(STItem::ROLL_UP_MAX_LEVEL)) {
                     $errors[] = 'Could not roll-up latest costs';
                     $db->FailTrans();
                 }
             } else {
                 $errors[] = 'Could not roll-up latest costs';
                 $db->FailTrans();
             }
         } else {
             $errors[] = 'Could not add new structure';
             $db->FailTrans();
         }
     }
     $db->CompleteTrans();
     if (count($errors) == 0) {
         $flash->addMessage('Structure substituted');
         sendTo($this->name, 'index', $this->_modules, array('stitem_id' => $this->_data[$this->modeltype]['stitem_id']));
     } else {
         $flash->addErrors($errors);
         sendBack();
     }
 }
Example #2
0
 public function markObsolete()
 {
     $flash = Flash::Instance();
     $db = DB::Instance();
     $db->StartTrans();
     $errors = array();
     $stitem = DataObjectFactory::Factory($this->modeltype);
     if ($stitem->load($this->_data['id'])) {
         $stitem->obsolete_date = date('Y-m-d');
         if (!$stitem->save()) {
             $errors[] = 'Could not mark as obsolete';
             $db->FailTrans();
         }
     } else {
         $errors[] = 'Could not mark as obsolete';
         $db->FailTrans();
     }
     if (count($errors) == 0) {
         $cc = new ConstraintChain();
         $cc->add(new Constraint('ststructure_id', '=', $stitem->id));
         $cc->add(new Constraint('end_date', 'IS', 'NULL'));
         $mfstructure = DataObjectFactory::Factory('MFStructure');
         $mfstructure_ids = array_keys($mfstructure->getAll($cc));
         $data = array('end_date' => date(DATE_FORMAT), 'remarks' => 'Marked as obsolete');
         foreach ($mfstructure_ids as $mfstructure_id) {
             $data['id'] = $mfstructure_id;
             $mfstructure = MFStructure::Factory($data, $errors, 'MFStructure');
             if (count($errors) == 0 && $mfstructure->save()) {
                 continue;
             }
             $errors[] = 'Could not update structure';
             $db->FailTrans();
             break;
         }
         if (count($errors) == 0) {
             if (!$stitem->rollUp(STItem::ROLL_UP_MAX_LEVEL)) {
                 $errors[] = 'Could not roll-up latest costs';
                 $db->FailTrans();
             }
         }
     }
     $db->CompleteTrans();
     if (count($errors) == 0) {
         $flash->addMessage('Stock item marked as obsolete');
         sendTo($this->name, 'view', $this->_modules, array('id' => $this->_data['id']));
     } else {
         $flash->addErrors($errors);
         sendBack();
     }
 }