Пример #1
0
 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());
     }
 }
Пример #2
0
 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());
     }
 }
Пример #3
0
 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);
     }
 }