ソースを参照

Se actualizo controlador de Servicio ademas se agrego tabla ServicioTipoServicio

Jose Cienfuegos 8 ヶ月 前
コミット
754b172f78

+ 43 - 0
migrations/m240822_030046_tabla_ServicioElementoServicio.php

@@ -0,0 +1,43 @@
+<?php
+
+use yii\db\Migration;
+
+/**
+ * Class m240822_030046_tabla_ServicioElementoServicio
+ */
+class m240822_030046_tabla_ServicioElementoServicio extends Migration
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function safeUp()
+    {
+        $this->createTable("ServicioTipoServicio", [
+            "id" => $this->string(36),
+            "idServicio" => $this->string(36),
+            "idTipoServicio" => $this->string(36),
+            "nombre" => $this->string(),
+            "costo" => $this->decimal(12,2),
+            "creado" => $this->timestamp()->append("with time zone"),
+            "modificado" => $this->timestamp()->append("with time zone"),
+            "eliminado" => $this->timestamp()->append("with time zone"),
+        ]);
+
+        $this->addPrimaryKey('ServicioTipoServicioPK', 'ServicioTipoServicio', 'id');
+
+        $this->addForeignKey('ServicioTipoServicioServicioFK', 'ServicioTipoServicio', 'idServicio', 'Servicio', 'id');
+        $this->addForeignKey('ServicioTipoServicioTipoFK', 'ServicioTipoServicio', 'idTipoServicio', 'TipoServicio', 'id');
+        
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function safeDown()
+    {
+        $this->dropForeignKey('ServicioTipoServicioTipoFK', 'ServicioTipoServicio');
+        $this->dropForeignKey('ServicioTipoServicioServicioFK', 'ServicioTipoServicio');
+
+        $this->dropTable('ServicioTipoServicio');
+    }
+}

+ 11 - 19
models/Servicio.php

@@ -18,10 +18,11 @@ use Yii;
  * @property string|null $modificado
  * @property string|null $eliminado
  *
- * @property Taller $idTaller
- * @property Vehiculo $idVehiculo
- * @property TipoServicio $idTipo
+ * @property Taller $idTaller0
+ * @property Vehiculo $idVehiculo0
+ * @property TipoServicio $idTipo0
  * @property ServicioElemento[] $servicioElementos
+ * @property ServicioTipoServicio[] $servicioTipoServicios
  */
 class Servicio extends ModeloBase
 {
@@ -63,14 +64,14 @@ class Servicio extends ModeloBase
             'fechaServicio' => 'Fecha Servicio',
             'idTaller' => 'Id Taller',
             'idVehiculo' => 'Id Vehiculo',
-            'idTipo'=>'Id Tipo Servicio',
+            'idTipo' => 'Id Tipo',
             'creado' => 'Creado',
             'modificado' => 'Modificado',
             'eliminado' => 'Eliminado',
         ];
     }
 
-    /**
+     /**
      * Gets query for [[IdTaller0]].
      *
      * @return \yii\db\ActiveQuery
@@ -80,27 +81,18 @@ class Servicio extends ModeloBase
         return $this->hasOne(Taller::class, ['id' => 'idTaller']);
     }
 
-    /**
-     * Gets query for [[IdVehiculo0]].
-     *
-     * @return \yii\db\ActiveQuery
-     */
     public function getVehiculo()
     {
         return $this->hasOne(Vehiculo::class, ['id' => 'idVehiculo']);
     }
 
-    public function getTipoServicio()
-    {
-        return $this->hasOne(TipoServicio::class, ['id' => 'idTipo']);
-    }
-    /**
-     * Gets query for [[ServicioElementos]].
-     *
-     * @return \yii\db\ActiveQuery
-     */
     public function getServicioElemento()
     {
         return $this->hasMany(ServicioElemento::class, ['idServicio' => 'id']);
     }
+
+    public function getTipoServicio()
+    {
+        return $this->hasMany(ServicioTipoServicio::class, ['idServicio' => 'id']);
+    }
 }

+ 72 - 0
models/ServicioTipoServicio.php

@@ -0,0 +1,72 @@
+<?php
+
+namespace app\models;
+
+use Yii;
+
+/**
+ * This is the model class for table "ServicioTipoServicio".
+ *
+ * @property string $id
+ * @property string|null $idServicio
+ * @property string|null $idTipoServicio
+ * @property float|null $costo
+ * @property string|null $creado
+ * @property string|null $modificado
+ * @property string|null $eliminado
+ *
+ * @property Servicio $idServicio0
+ * @property TipoServicio $idTipoServicio0
+ */
+class ServicioTipoServicio extends ModeloBase
+{
+    /**
+     * {@inheritdoc}
+     */
+    public static function tableName()
+    {
+        return 'ServicioTipoServicio';
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function rules()
+    {
+        return [
+            [['id'], 'required'],
+            [['costo'], 'number'],
+            [['creado', 'modificado', 'eliminado'], 'safe'],
+            [['id', 'idServicio', 'idTipoServicio'], 'string', 'max' => 36],
+            [['id'], 'unique'],
+            [['idServicio'], 'exist', 'skipOnError' => true, 'targetClass' => Servicio::class, 'targetAttribute' => ['idServicio' => 'id']],
+            [['idTipoServicio'], 'exist', 'skipOnError' => true, 'targetClass' => TipoServicio::class, 'targetAttribute' => ['idTipoServicio' => 'id']],
+        ];
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function attributeLabels()
+    {
+        return [
+            'id' => 'ID',
+            'idServicio' => 'Id Servicio',
+            'idTipoServicio' => 'Id Tipo Servicio',
+            'costo' => 'Costo',
+            'creado' => 'Creado',
+            'modificado' => 'Modificado',
+            'eliminado' => 'Eliminado',
+        ];
+    }
+
+    public function getServicio()
+    {
+        return $this->hasOne(Servicio::class, ['id' => 'idServicio']);
+    }
+
+    public function getTipoServicio()
+    {
+        return $this->hasOne(TipoServicio::class, ['id' => 'idTipoServicio']);
+    }
+}

+ 44 - 18
modules/v1/controllers/ServicioController.php

@@ -2,8 +2,10 @@
 
 namespace v1\controllers;
 
+use app\models\ServicioTipoServicio;
 use common\data\Respuesta;
 use common\rest\AuthController;
+use Yii;
 use yii\db\Expression;
 
 class ServicioController extends AuthController {
@@ -61,28 +63,52 @@ class ServicioController extends AuthController {
 
   public function actionGuardar() {
     $id = trim($this->req->getBodyParam("id", ""));
+    $tipoServicio = $this->req->getBodyParam("tipoServicio", []);
     $modelo = null;
 
-    if($id !== "") {
-      $modelo = $this->modelClass::findOne($id);
-    }
-    if($modelo === null) {
-      $modelo = new $this->modelClass();
-      $modelo->uuid();
-      $modelo->creado = new Expression('now()');
-    } else {
-      $modelo->modificado = new Expression('now()');
-    }
-
-    $modelo->load($this->req->getBodyParams(), '');
-    if (!$modelo->save()) {
+    $transaccion = \Yii::$app->db->beginTransaction();
+    try {
+
+      if ($id !== "") {
+        $modelo = $this->modelClass::findOne($id);
+      }
+      if ($modelo === null) {
+        $modelo = new $this->modelClass();
+        $modelo->uuid();
+        $modelo->creado = new Expression('now()');
+      } else {
+        $modelo->modificado = new Expression('now()');
+      }
+
+      $modelo->load($this->req->getBodyParams(), '');
+      if (!$modelo->save()) {
+        return (new Respuesta($modelo))
+          ->mensaje("Hubo un problema al guardar el Servicio");
+      }
+
+      ServicioTipoServicio::deleteAll(['id' => $modelo->id]);
+
+      foreach ($tipoServicio as $idTipoServicio) {
+        $tipoServicios = new ServicioTipoServicio();
+        $tipoServicios->uuid();
+        $tipoServicios->idServicio = $modelo->id;
+        $tipoServicios->idTipoServicio = $idTipoServicio;
+        if (!$tipoServicios->save()) {
+          return (new Respuesta($tipoServicios))
+            ->mensaje("Hubo un problema al guardar el Tipo de Servicio");
+        }
+      }
+
+      $transaccion->commit();
+      $modelo->refresh();
+      return (new Respuesta($modelo))
+        ->mensaje("Servicio ha sido guardado de manera exitosa");
+    } catch (\Exception $e) {
+      $transaccion->rollBack();
       return (new Respuesta($modelo))
-        ->mensaje("Hubo un problema al guardar el Servicio");
+        ->esError()
+        ->mensaje($e->getMessage());
     }
-
-    $modelo->refresh();
-    return (new Respuesta($modelo))
-      ->mensaje("Servicio guardado");
   }
 
   public function actionEliminar() {

+ 9 - 3
modules/v1/models/Servicio.php

@@ -17,7 +17,6 @@ class Servicio extends ModeloServicio {
             'fechaServicio',
             'idTaller',
             'idVehiculo',
-            'idTipo',
             'creado',
             'modificado',
         ];
@@ -27,8 +26,10 @@ class Servicio extends ModeloServicio {
         return [
             'taller',
             'vehiculo',
+            'servicioElemento',
             'tipoServicio',
-            'servicioElemento'
+            'tipoServicios',
+            
         ];
     }
 
@@ -40,10 +41,15 @@ class Servicio extends ModeloServicio {
         return $this->hasOne(Vehiculo::class, ['id' => 'idVehiculo']);
     }
     public function getTipoServicio() {
-        return $this->hasOne(TipoServicio::class, ['id' => 'idTipo']);
+        return $this->hasMany(TipoServicio::class, ['id' => 'idTipo']);
     }
     public function getServicioElemento()
     {
         return $this->hasMany(ServicioElemento::class, ['idServicio' => 'id']);
     }
+
+    public function getTipoServicios()
+    {
+        return $this->hasMany(ServicioTipoServicio::class, ['idServicio' => 'id']);
+    }
 }

+ 37 - 0
modules/v1/models/ServicioTipoServicio.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace v1\models;
+
+use app\models\ServicioTipoServicio as ModeloServicioTipoServicio;
+
+class ServicioTipoServicio extends ModeloServicioTipoServicio {
+
+  public function fields() {
+    return [
+      'id',
+      'idServicio',
+      'idTipoServicio',
+      'costo',
+      'creado',
+      'modificado',
+    ];
+  }
+
+  public function extraFields() {
+    return [
+        'servicio',
+        'tipoServicio',
+    ];
+}
+
+
+public function getServicio()
+{
+    return $this->hasOne(Servicio::class, ['id' => 'idServicio']);
+}
+
+public function getTipoServicio()
+{
+  return $this->hasOne(TipoServicio::class, ['id' => 'idTipoServicio']);
+}
+}