From cb8e5a5c15621588ac4358eaddd2dee25b9047dd Mon Sep 17 00:00:00 2001 From: Drahma Date: Thu, 14 Mar 2024 18:06:56 +0200 Subject: [PATCH 1/4] HP-1596/Add_warranty_period_for_models_and_parts --- src/grid/ModelColumn.php | 51 ++++++++++++++++++++++++++ src/grid/PartGridView.php | 14 +++----- src/grid/PartRepresentations.php | 2 +- src/models/Model.php | 5 +-- src/models/Part.php | 1 + src/views/model/_form.php | 13 ++++++- src/views/part/_form.php | 61 ++++++++++++++++++++++---------- 7 files changed, 115 insertions(+), 32 deletions(-) create mode 100644 src/grid/ModelColumn.php diff --git a/src/grid/ModelColumn.php b/src/grid/ModelColumn.php new file mode 100644 index 00000000..553a62be --- /dev/null +++ b/src/grid/ModelColumn.php @@ -0,0 +1,51 @@ +attribute = 'model'; + $this->prepareValue(); + } + + private function prepareValue(): void + { + $this->value = function ($model): string { + $modelLabel = Html::encode($model->model_label); + if (Yii::$app->user->can('model.read')) { + $modelLabel = Html::a($modelLabel, ['@model/view', 'id' => $model->model_id]); + } + if (isset($model->warranty_till)) { + $modelLabel .= $this->getWarrantyLabel($model); + } + return $modelLabel; + }; + } + + private function getWarrantyLabel($model): string + { + $diffTime = date_diff(new DateTimeImmutable(), new DateTimeImmutable($model->warranty_till)); + $diff = (int)$diffTime->format('%y') * 12 + (int)$diffTime->format('%m'); + $diff = ($diffTime->invert === 1) ? $diff * -1 : $diff; + $diff = ($diff < 0) ? 'X' : $diff; + $color = 'info'; + if ($diff <= 6) { + $color = 'warning'; + } + if (!is_numeric($diff)) { + $color = 'danger'; + } + return Label::widget(['label' => $diff, 'tag' => 'sup', 'color' => $color]); + } +} \ No newline at end of file diff --git a/src/grid/PartGridView.php b/src/grid/PartGridView.php index 5f475afc..c0b08f6f 100644 --- a/src/grid/PartGridView.php +++ b/src/grid/PartGridView.php @@ -16,6 +16,7 @@ use hipanel\grid\CurrencyColumn; use hipanel\grid\RefColumn; use hipanel\modules\client\grid\ClientColumn; +use hipanel\modules\stock\grid\ModelColumn; use hipanel\modules\stock\helpers\ProfitColumns; use hipanel\modules\stock\models\Move; use hipanel\modules\stock\models\Part; @@ -94,17 +95,9 @@ public function columns() ], ], 'model' => [ - 'attribute' => 'model', + 'class' => ModelColumn::class, 'format' => 'raw', 'label' => Yii::t('hipanel:stock', 'Model'), - 'value' => function ($model) { - $modelLabel = Html::encode($model->model_label); - if (Yii::$app->user->can('model.read')) { - return Html::a($modelLabel, ['@model/view', 'id' => $model->model_id]); - } - - return $modelLabel; - }, ], 'model_type' => [ 'class' => RefColumn::class, @@ -115,6 +108,9 @@ public function columns() 'value' => function ($model) { return $model->model_type_label; }, + ], + 'warranty_till' => [ + ], 'model_type_label' => [ 'class' => RefColumn::class, diff --git a/src/grid/PartRepresentations.php b/src/grid/PartRepresentations.php index bc948481..08257469 100644 --- a/src/grid/PartRepresentations.php +++ b/src/grid/PartRepresentations.php @@ -17,7 +17,7 @@ protected function fillRepresentations() 'columns' => array_filter([ 'checkbox', 'model_type', 'model_brand', 'model', 'partno', 'serial', - 'last_move', 'move_type_and_date', 'device_location', + 'last_move', 'move_type_and_date', 'device_location', 'warranty_till', $user->can('move.read') ? 'move_descr' : null, $user->can('order.read') ? 'order_name' : null, $user->can('order.read') ? 'company_id' : null, diff --git a/src/models/Model.php b/src/models/Model.php index fce5f73d..f1473957 100644 --- a/src/models/Model.php +++ b/src/models/Model.php @@ -94,8 +94,8 @@ public function rules() ], 'safe', ], - [['is_favorite', 'show_deleted'], 'boolean'], - [['id', 'type_id', 'tariff_id', 'group_id'], 'integer'], + [['is_favorite', 'show_deleted', 'warranty_in_all_part'], 'boolean'], + [['id', 'type_id', 'tariff_id', 'group_id', 'warranty_months'], 'integer'], // Delete [['id'], 'integer', 'on' => ['delete']], @@ -143,6 +143,7 @@ public function attributeLabels() 'group' => Yii::t('hipanel:stock', 'Group'), 'group_id' => Yii::t('hipanel:stock', 'Group'), 'is_favorite' => Yii::t('hipanel:stock', 'Is favorite'), + 'warranty_months' => Yii::t('hipanel:stock', 'Warranty months'), // Chassis 'UNITS_QTY' => Yii::t('hipanel:stock', 'Units'), '35_HDD_QTY' => Yii::t('hipanel:stock', '3.5" HDD'), diff --git a/src/models/Part.php b/src/models/Part.php index 30200141..3142eda2 100644 --- a/src/models/Part.php +++ b/src/models/Part.php @@ -86,6 +86,7 @@ public function rules() 'order_name', 'company', 'device_location', + 'warranty_till', ], 'safe', ], diff --git a/src/views/model/_form.php b/src/views/model/_form.php index 55c145a1..51ef209c 100644 --- a/src/views/model/_form.php +++ b/src/views/model/_form.php @@ -63,6 +63,7 @@ function getAdditionl(elem) { 'short', 'descr', 'url', + 'warranty_months', ], ]) ?>
@@ -105,8 +106,18 @@ class="glyphicon glyphicon-minus"> (!$model->isNewRecord && $model->scenario != Model::SCENARIO_COPY) ? ['disabled' => 'disabled'] : ['prompt' => '--']) ?>
- field($model, "[$i]group_id")->widget(ModelGroupCombo::class) ?> +
+
+ field($model, "[$i]group_id")->widget(ModelGroupCombo::class) ?> +
+
+ field($model, "[$i]warranty_months") ?> +
+
field($model, "[$i]short")->textarea() ?> + isNewRecord) : ?> + field($model, "[$i]warranty_in_all_part")->checkbox() ?> +
diff --git a/src/views/part/_form.php b/src/views/part/_form.php index 2f39a052..e184ba00 100644 --- a/src/views/part/_form.php +++ b/src/views/part/_form.php @@ -8,6 +8,7 @@ use hipanel\modules\stock\widgets\combo\SourceCombo; use hipanel\widgets\AmountWithCurrency; use hipanel\widgets\Box; +use hipanel\widgets\DateTimePicker; use hipanel\widgets\DynamicFormCopyButton; use hipanel\widgets\DynamicFormWidget; use yii\bootstrap\ActiveForm; @@ -48,6 +49,7 @@ 'price', 'currency', 'company_id', + 'warranty_till', ] : [ 'model_id', 'dst_name', @@ -55,6 +57,7 @@ 'company_id', 'price', 'currency', + 'warranty_till', ], ]) ?> @@ -94,6 +97,13 @@ class="glyphicon glyphicon-minus"> 'multiple' => true, ]) ?> + field($model, "[$i]warranty_till")->widget(DateTimePicker::class, [ + 'clientOptions' => [ + 'format' => 'yyyy-mm-dd', + 'minView' => 2, + 'todayHighlight' => true, + ], + ]) ?>
@@ -118,26 +128,39 @@ class="glyphicon glyphicon-minus">
-
- field($model, "[$i]model_id")->widget(ModelCombo::class) ?> -
-
- field($model, "[$i]dst_name")->textInput(['disabled' => true])->label(Yii::t('hipanel:stock', 'Location')) ?> -
-
- field($model, "[$i]serial") ?> -
-
- field($model, "[$i]company_id")->widget(CompanyCombo::class) ?> +
+
+ field($model, "[$i]model_id")->widget(ModelCombo::class) ?> +
+
+ field($model, "[$i]dst_name")->textInput(['disabled' => true])->label(Yii::t('hipanel:stock', 'Location')) ?> +
+
+ field($model, "[$i]serial") ?> +
-
- field($model, "[$i]price")->widget(AmountWithCurrency::class, [ - 'currencyAttributeName' => "[$i]currency", - 'currencyAttributeOptions' => [ - 'items' => $currencyTypes, - ], - ]) ?> - field($model, "[$i]currency", ['template' => '{input}{error}'])->hiddenInput() ?> +
+
+ field($model, "[$i]warranty_till")->widget(DateTimePicker::class, [ + 'clientOptions' => [ + 'format' => 'yyyy-mm-dd', + 'minView' => 2, + 'todayHighlight' => true, + ], + ]) ?> +
+
+ field($model, "[$i]company_id")->widget(CompanyCombo::class) ?> +
+
+ field($model, "[$i]price")->widget(AmountWithCurrency::class, [ + 'currencyAttributeName' => "[$i]currency", + 'currencyAttributeOptions' => [ + 'items' => $currencyTypes, + ], + ]) ?> + field($model, "[$i]currency", ['template' => '{input}{error}'])->hiddenInput() ?> +
field($model, "[$i]move_descr") ?> From b8babb96e85d097e50a5f0d269f3fa30749fdb2d Mon Sep 17 00:00:00 2001 From: Drahma Date: Sun, 17 Mar 2024 19:22:28 +0200 Subject: [PATCH 2/4] HP-1596/Fixed after review --- src/grid/ModelColumn.php | 10 ++++++---- src/models/Model.php | 1 + 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/grid/ModelColumn.php b/src/grid/ModelColumn.php index 553a62be..b27a7ccc 100644 --- a/src/grid/ModelColumn.php +++ b/src/grid/ModelColumn.php @@ -1,10 +1,12 @@ value = function ($model): string { + $this->value = function (Part $model): string { $modelLabel = Html::encode($model->model_label); if (Yii::$app->user->can('model.read')) { $modelLabel = Html::a($modelLabel, ['@model/view', 'id' => $model->model_id]); @@ -33,7 +35,7 @@ private function prepareValue(): void }; } - private function getWarrantyLabel($model): string + private function getWarrantyLabel(Part $model): string { $diffTime = date_diff(new DateTimeImmutable(), new DateTimeImmutable($model->warranty_till)); $diff = (int)$diffTime->format('%y') * 12 + (int)$diffTime->format('%m'); @@ -48,4 +50,4 @@ private function getWarrantyLabel($model): string } return Label::widget(['label' => $diff, 'tag' => 'sup', 'color' => $color]); } -} \ No newline at end of file +} diff --git a/src/models/Model.php b/src/models/Model.php index f1473957..823f74e1 100644 --- a/src/models/Model.php +++ b/src/models/Model.php @@ -144,6 +144,7 @@ public function attributeLabels() 'group_id' => Yii::t('hipanel:stock', 'Group'), 'is_favorite' => Yii::t('hipanel:stock', 'Is favorite'), 'warranty_months' => Yii::t('hipanel:stock', 'Warranty months'), + 'warranty_in_all_part' => Yii::t('hipanel:stock', 'Warranty in all parts'), // Chassis 'UNITS_QTY' => Yii::t('hipanel:stock', 'Units'), '35_HDD_QTY' => Yii::t('hipanel:stock', '3.5" HDD'), From 9f5d168698e009f0d5d19cd4213fe4fa07fb12ab Mon Sep 17 00:00:00 2001 From: Drahma Date: Sun, 17 Mar 2024 21:51:02 +0200 Subject: [PATCH 3/4] HP-1596/Checged field name --- src/models/Model.php | 4 ++-- src/views/model/_form.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/models/Model.php b/src/models/Model.php index 823f74e1..2f2d1924 100644 --- a/src/models/Model.php +++ b/src/models/Model.php @@ -94,7 +94,7 @@ public function rules() ], 'safe', ], - [['is_favorite', 'show_deleted', 'warranty_in_all_part'], 'boolean'], + [['is_favorite', 'show_deleted', 'set_warranty_till_in_exising_parts'], 'boolean'], [['id', 'type_id', 'tariff_id', 'group_id', 'warranty_months'], 'integer'], // Delete @@ -144,7 +144,7 @@ public function attributeLabels() 'group_id' => Yii::t('hipanel:stock', 'Group'), 'is_favorite' => Yii::t('hipanel:stock', 'Is favorite'), 'warranty_months' => Yii::t('hipanel:stock', 'Warranty months'), - 'warranty_in_all_part' => Yii::t('hipanel:stock', 'Warranty in all parts'), + 'set_warranty_till_in_exising_parts' => Yii::t('hipanel:stock', 'Set warranty till in exising parts'), // Chassis 'UNITS_QTY' => Yii::t('hipanel:stock', 'Units'), '35_HDD_QTY' => Yii::t('hipanel:stock', '3.5" HDD'), diff --git a/src/views/model/_form.php b/src/views/model/_form.php index 51ef209c..3f82aabc 100644 --- a/src/views/model/_form.php +++ b/src/views/model/_form.php @@ -116,7 +116,7 @@ class="glyphicon glyphicon-minus">
field($model, "[$i]short")->textarea() ?> isNewRecord) : ?> - field($model, "[$i]warranty_in_all_part")->checkbox() ?> + field($model, "[$i]set_warranty_till_in_exising_parts")->checkbox() ?>
From c2ba14bd65701ea05523dde2a110c5e7c7148a61 Mon Sep 17 00:00:00 2001 From: Drahma Date: Sun, 17 Mar 2024 22:01:35 +0200 Subject: [PATCH 4/4] HP-1596/Fixed condition --- src/grid/ModelColumn.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/grid/ModelColumn.php b/src/grid/ModelColumn.php index b27a7ccc..3af2c2d4 100644 --- a/src/grid/ModelColumn.php +++ b/src/grid/ModelColumn.php @@ -40,7 +40,7 @@ private function getWarrantyLabel(Part $model): string $diffTime = date_diff(new DateTimeImmutable(), new DateTimeImmutable($model->warranty_till)); $diff = (int)$diffTime->format('%y') * 12 + (int)$diffTime->format('%m'); $diff = ($diffTime->invert === 1) ? $diff * -1 : $diff; - $diff = ($diff < 0) ? 'X' : $diff; + $diff = ($diff <= 0) ? 'X' : $diff; $color = 'info'; if ($diff <= 6) { $color = 'warning';