public function save($IDinstaller) { if ($this->validate()) { $transaction = Yii::$app->db->beginTransaction(); try { $Installakt = new Installakt(); $Installakt->installakt_date = date('Y-m-d'); $Installakt->id_installer = $IDinstaller; if ($Installakt->save()) { $Mattraffic = new Mattraffic(); $Mattraffic_choose = Mattraffic::findOne($this->id_mattraffic); $Mattraffic->attributes = $Mattraffic_choose->attributes; $Mattraffic->mattraffic_date = date('Y-m-d'); $Mattraffic->mattraffic_number = empty($this->mattraffic_number) ? 1 : $this->mattraffic_number; $Mattraffic->mattraffic_tip = 3; if ($Mattraffic->save()) { $trOsnov = new TrOsnov(); $trOsnov->id_installakt = $Installakt->primaryKey; $trOsnov->id_mattraffic = $Mattraffic->primaryKey; $trOsnov->tr_osnov_kab = $this->tr_osnov_kab; if ($trOsnov->save()) { $this->mattraffic_trosnov_id = $trOsnov->primaryKey; $this->primaryKey = $trOsnov->primaryKey; $transaction->commit(); return true; } else { $transaction->rollBack(); return false; } } else { $this->addError('mattraffic_number', $Mattraffic->getErrors('mattraffic_number')[0]); $transaction->rollBack(); return false; } } else { $transaction->rollBack(); return false; } } catch (Exception $e) { $transaction->rollBack(); throw new Exception($e->getMessage()); } } else { return false; } }
public function actionCreate() { $model = new TrMat(); $Mattraffic = new Mattraffic(); $mattraffic_number_max = NULL; // Если форма отправлена на сервер, получаем выбранную материальную ценность $id_mattraffic = isset(Yii::$app->request->post('TrMat')['id_mattraffic']) ? Yii::$app->request->post('TrMat')['id_mattraffic'] : ''; $transaction = Yii::$app->db->beginTransaction(); try { // Если форма отправлена на сервер, то создать запись перемещения мат цен-ти в mattraffic if (!empty($id_mattraffic)) { $Mattrafficcurrent = Mattraffic::findOne($id_mattraffic); $Mattraffic->attributes = $Mattrafficcurrent->attributes; $Mattraffic->mattraffic_date = date('Y-m-d'); $Mattraffic->mattraffic_number = isset(Yii::$app->request->post('Mattraffic')['mattraffic_number']) ? Yii::$app->request->post('Mattraffic')['mattraffic_number'] : NULL; $Mattraffic->mattraffic_tip = 4; if (isset($Mattraffic->scenarios()['trafficmat'])) { $Mattraffic->scenario = 'trafficmat'; } if ($Mattraffic->validate()) { $Mattraffic->save(false); $model->load(Yii::$app->request->post()); $model->id_mattraffic = $Mattraffic->mattraffic_id; } //Акт установки уже создан и берется из URL параметра $model->id_installakt = (string) filter_input(INPUT_GET, 'idinstallakt'); } // Сохраняем модель с отправленными данными и сохраненным mattraffic if (!$Mattraffic->isNewRecord && $model->save()) { $transaction->commit(); return $this->redirect(Proc::GetPreviousURLBreadcrumbsFromSession()); } else { /* // Очистить ошибку id_mattraffic, если есть ошибка по mattraffic_number (Превышено допустимое кол-во для перемещения матер. цен-ти) if (isset($Mattraffic->errors['mattraffic_number'])) $model->clearErrors('id_mattraffic'); */ $transaction->rollBack(); return $this->render('create', ['model' => $model, 'Mattraffic' => $Mattraffic, 'mattraffic_number_max' => $mattraffic_number_max]); } } catch (Exception $e) { $transaction->rollBack(); throw new Exception($e->getMessage()); } }
public function actionCreate() { $model = new Material(); if (isset($model->scenarios()['prihod'])) { $model->scenario = 'prihod'; } $model->material_importdo = 1; $Mattraffic = new Mattraffic(); if ($model->load(Yii::$app->request->post())) { if (empty($model->material_name1c)) { $model->material_name1c = $model->material_name; } if ($model->material_tip == 1) { $model->material_number = 1; } if ($model->save()) { $Mattraffic->id_material = empty($Mattraffic->id_material) ? $model->material_id : $Mattraffic->id_material; $Mattraffic->mattraffic_number = empty($Mattraffic->mattraffic_number) ? $model->material_number : $Mattraffic->mattraffic_number; $Mattraffic->mattraffic_tip = empty($Mattraffic->mattraffic_tip) ? 1 : $Mattraffic->mattraffic_tip; if ($Mattraffic->load(Yii::$app->request->post()) && $Mattraffic->save()) { Proc::RemoveLastBreadcrumbsFromSession(); // Удаляем последнюю хлебную крошку из сессии (Создать меняется на Обновить) return $this->redirect(['update', 'id' => $model->primaryKey]); } else { return $this->render('create', ['model' => $model, 'Mattraffic' => $Mattraffic]); } } else { return $this->render('create', ['model' => $model, 'Mattraffic' => $Mattraffic]); } } else { $model->material_number = empty($model->material_number) ? 1 : $model->material_number; $model->material_price = empty($model->material_price) ? 1 : $model->material_price; $model->material_tip = empty($model->material_tip) ? 1 : $model->material_tip; $model->id_matvid = empty($model->id_matvid) ? 1 : $model->id_matvid; $model->id_izmer = empty($model->id_izmer) ? 1 : $model->id_izmer; $Mattraffic->mattraffic_date = empty($Mattraffic->mattraffic_date) ? date('Y-m-d') : $Mattraffic->mattraffic_date; return $this->render('create', ['model' => $model, 'Mattraffic' => $Mattraffic]); } }
public function actionCreate() { $model = new TrOsnov(); $Mattraffic = new Mattraffic(); $Material = new Material(); $Employee = new Employee(); $mattraffic_number_max = NULL; // Если форма отправлена на сервер, получаем выбранную материальную ценность $id_mattraffic = isset(Yii::$app->request->post('TrOsnov')['id_mattraffic']) ? Yii::$app->request->post('TrOsnov')['id_mattraffic'] : ''; $transaction = Yii::$app->db->beginTransaction(); try { // Если форма отправлена на сервер, то создать запись перемещения мат цен-ти в mattraffic if (!empty($id_mattraffic)) { $Mattrafficcurrent = Mattraffic::findOne($id_mattraffic); $Mattraffic->attributes = $Mattrafficcurrent->attributes; $Mattraffic->mattraffic_date = date('Y-m-d'); $Mattraffic->mattraffic_number = isset(Yii::$app->request->post('Mattraffic')['mattraffic_number']) ? Yii::$app->request->post('Mattraffic')['mattraffic_number'] : NULL; $Mattraffic->mattraffic_tip = 3; if (isset($Mattraffic->scenarios()['traffic'])) { $Mattraffic->scenario = 'traffic'; } if ($Mattraffic->validate()) { $Mattraffic->save(false); $model->id_mattraffic = $Mattraffic->mattraffic_id; } //Акт установки уже создан и берется из URL параметра $model->id_installakt = (string) filter_input(INPUT_GET, 'idinstallakt'); //Сохраняем кабинет в модель из отправленной формы $model->tr_osnov_kab = isset(Yii::$app->request->post('TrOsnov')['tr_osnov_kab']) ? Yii::$app->request->post('TrOsnov')['tr_osnov_kab'] : NULL; } // Сохраняем модель с отправленными данными и сохраненным mattraffic if (!$Mattraffic->isNewRecord && $model->save()) { $transaction->commit(); return $this->redirect(Proc::GetPreviousURLBreadcrumbsFromSession()); } else { // иначе // Берет значение сначала из справочника (посредством перехода на страницу выбора), если нет, то вытаскивает из сессии (для простого обновления страницы) // выводит $PreviusBC - для последующей передачи в функцию Proc::SetSessionValuesFromAR, т.е. установить в последнюю сессию или предыдущую (хлебных крошек) $PreviusBC = Proc::GetValueForFillARs($id_mattraffic, 'TrOsnov', 'id_mattraffic'); // Очистить ошибку id_mattraffic, если есть ошибка по mattraffic_number (Превышено допустимое кол-во для перемещения матер. цен-ти) //if (isset($Mattraffic->errors['mattraffic_number'])) // $model->clearErrors('id_mattraffic'); // Если выбрана мат. цен-ть, то заполнить информацию для отображения на форме по мат. цен-ти и МОЛ if (!empty($id_mattraffic)) { $Material = Material::find()->joinWith('mattraffics')->where(['mattraffic_id' => $id_mattraffic])->one(); $Employee = Employee::find()->joinWith('mattraffics')->where(['mattraffic_id' => $id_mattraffic])->one(); // GetMaxNumberMattrafficForInstallAkt - Определяем максимально допустимое кол-во материала для перемещения (Общее кол-во материала минус уже перемещенное кол-во) $mattraffic_number_max = 'Не более ' . doubleval(Mattraffic::GetMaxNumberMattrafficForInstallAkt($id_mattraffic)); // Сохраняем модель мат. цен-ти и МОЛ'а в сессию (т.к. эти модели только для отображения) Proc::SetSessionValuesFromAR($Material, $PreviusBC); Proc::SetSessionValuesFromAR($Employee, $PreviusBC); } // Откатываем транзакцию $transaction->rollBack(); return $this->render('create', ['model' => $model, 'Mattraffic' => $Mattraffic, 'Material' => $Material, 'Employee' => $Employee, 'mattraffic_number_max' => $mattraffic_number_max]); } } catch (Exception $e) { $transaction->rollBack(); throw new Exception($e->getMessage()); } }
private static function MaterialSpisanie() { $transaction = Yii::$app->db->beginTransaction(); try { $Typemat = self::IsFileType(self::mat) ? 2 : 3; $SP = Mattraffic::find()->from(['m1' => 'mattraffic'])->join('LEFT JOIN', 'material', 'm1.id_material = material.material_id')->join('LEFT JOIN', 'mattraffic m2', 'm1.id_material = m2.id_material and m1.id_mol = m2.id_mol and m1.mattraffic_date < m2.mattraffic_date and m1.mattraffic_tip in (1,2) and m2.mattraffic_tip in (1,2)')->andWhere(['m1.mattraffic_forimport' => NULL, 'material_writeoff' => 0])->andWhere(['in', 'material_tip', [$Typemat]])->andWhere(['in', 'm1.mattraffic_tip', [1, 2]])->andWhere(['m1.mattraffic_tip' => 1])->andWhere(['m2.mattraffic_date' => NULL])->all(); if (!empty($SP)) { foreach ($SP as $i => $ar) { $spismat = self::SpisatMaterial($ar->id_material, $ar->id_mol); $Mattraffic = new Mattraffic(); $Mattraffic->attributes = $ar->attributes; $Mattraffic->mattraffic_date = date('Y-m-d'); $Mattraffic->mattraffic_number = 0; $Mattraffic->mattraffic_tip = 2; // Списание if (isset($Mattraffic->scenarios()['import1c'])) { $Mattraffic->scenario = 'import1c'; } $Mattraffic->save(false); $writeoffakt = new Writeoffakt(); $writeoffakt->id_mattraffic = $Mattraffic->mattraffic_id; $writeoffakt->save(false); $Material = Material::findOne($ar->id_material); $Matlog = new Matlog(); $Matlog->attributes = $Material->attributes; $Matlog->id_logreport = self::$logreport_id; $Matlog->matlog_filename = self::$filename; $Matlog->matlog_filelastdate = self::$filelastdate; $Matlog->matlog_rownum = 0; $Matlog->matlog_type = $spismat ? 4 : 2; $Matlog->matlog_message = $spismat ? 'Материал списан. ' : 'Запись не изменялась. '; $Matlog->matvid_name = self::GetNameByID('matvid', 'matvid_name', $Material->id_matvid); $Matlog->izmer_name = self::GetNameByID('izmer', 'izmer_name', $Material->id_izmer); $Matlog->schetuchet_kod = Schetuchet::findOne($Material->id_schetuchet)->schetuchet_kod; $Matlog->schetuchet_name = Schetuchet::findOne($Material->id_schetuchet)->schetuchet_name; $Matlog->material_writeoff = $Material->material_writeoff === 1 ? 'Да' : 'Нет'; $Matlog->material_release = isset($Material->material_release) ? Yii::$app->formatter->asDate($Material->material_release) : $Material->material_release; $Matlog->save(false); $Employee = Employee::find()->joinWith(['idperson', 'iddolzh', 'idpodraz', 'idbuild'])->where(['employee_id' => $ar->id_mol])->one(); $Employeelog = new Employeelog(); $Employeelog->attributes = $Employee->attributes; $Employeelog->id_logreport = self::$logreport_id; $Employeelog->employeelog_filename = self::$filename; $Employeelog->employeelog_filelastdate = self::$filelastdate; $Employeelog->employeelog_rownum = 0; $Employeelog->employeelog_type = 2; $Employeelog->employeelog_message = 'Запись не изменилась'; $Employeelog->employee_fio = $Employee->idperson->auth_user_fullname; $Employeelog->dolzh_name = $Employee->iddolzh->dolzh_name; $Employeelog->podraz_name = $Employee->idpodraz->podraz_name; $Employeelog->build_name = $Employee->isRelationPopulated('idbuild') ? $Employee->idbuild['build_name'] : ''; $Employeelog->save(false); $Traflog = new Traflog(); $Traflog->id_logreport = self::$logreport_id; $Traflog->traflog_type = 1; $Traflog->traflog_filename = self::$filename; $Traflog->traflog_rownum = 0; $Traflog->traflog_message = ''; $Traflog->id_matlog = $Matlog->primaryKey; $Traflog->id_employeelog = $Employeelog->primaryKey; $Traflog->traflog_message = 'Запись добавлена. Добавлен акт списания с номером "' . $writeoffakt->writeoffakt_id . '" на дату "' . date('d.m.Y', strtotime($Mattraffic->mattraffic_date)) . '".'; $Traflog->mattraffic_number = $ar->mattraffic_number; $Traflog->save(false); self::$logreport_additions++; } } Mattraffic::updateAll(['mattraffic_forimport' => NULL], ['mattraffic_forimport' => 1]); $transaction->commit(); } catch (Exception $e) { $transaction->rollBack(); Mattraffic::updateAll(['mattraffic_forimport' => NULL], ['mattraffic_forimport' => 1]); throw new Exception($e->getMessage() . ' MaterialSpisanie(), $filename = ' . self::$filename); } }