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(); } }
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(); } }