Przeglądaj źródła

Se agrego tabla MediaVehiculo para guardar archivos e imagenes

Jose Cienfuegos 8 miesięcy temu
rodzic
commit
210302b5fc

+ 42 - 0
migrations/m240819_222359_tabla_media_vehiculo.php

@@ -0,0 +1,42 @@
+<?php
+
+use yii\db\Migration;
+
+/**
+ * Class m240819_222359_tabla_media_vehiculo
+ */
+class m240819_222359_tabla_media_vehiculo extends Migration
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function safeUp()
+    {
+        $this->createTable("MediaVehiculo", [
+            "id" => $this->string(36),
+            "idMedia" => $this->string(36),
+            "idVehiculo" => $this->string(36),
+            "tipo" => $this->string(50),
+            "creado" => $this->timestamp()->append("with time zone"),
+            "modificado" => $this->timestamp()->append("with time zone"),
+            "eliminado" => $this->timestamp()->append("with time zone"),
+        ]);
+
+        $this->addPrimaryKey('MediaVehiculoPK', 'MediaVehiculo', 'id');
+
+        $this->addForeignKey('MediaVehiculoMediaFK', 'MediaVehiculo', 'idMedia', 'Media', 'id');
+        $this->addForeignKey('MediaVehiculoVehiculoFK', 'MediaVehiculo', 'idVehiculo', 'Vehiculo', 'id');
+    
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function safeDown()
+    {
+        $this->dropForeignKey('MediaVehiculoVehiculoFK', 'MediaVehiculo');
+        $this->dropForeignKey('MediaVehiculoMediaFK', 'MediaVehiculo');
+
+        $this->dropTable('MediaVehiculo');
+    }
+}

+ 82 - 0
models/MediaVehiculo.php

@@ -0,0 +1,82 @@
+<?php
+
+namespace app\models;
+
+use Yii;
+
+/**
+ * This is the model class for table "MediaVehiculo".
+ *
+ * @property string $id
+ * @property string|null $idMedia
+ * @property string|null $idVehiculo
+ * @property string|null $tipo
+ * @property string|null $creado
+ * @property string|null $modificado
+ * @property string|null $eliminado
+ *
+ * @property Media $idMedia0
+ * @property Vehiculo $idVehiculo0
+ */
+class MediaVehiculo extends ModeloBase
+{
+    /**
+     * {@inheritdoc}
+     */
+    public static function tableName()
+    {
+        return 'MediaVehiculo';
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function rules()
+    {
+        return [
+            [['id'], 'required'],
+            [['creado', 'modificado', 'eliminado'], 'safe'],
+            [['id', 'idMedia', 'idVehiculo'], 'string', 'max' => 36],
+            [['tipo'], 'string', 'max' => 50],
+            [['id'], 'unique'],
+            [['idMedia'], 'exist', 'skipOnError' => true, 'targetClass' => Media::class, 'targetAttribute' => ['idMedia' => 'id']],
+            [['idVehiculo'], 'exist', 'skipOnError' => true, 'targetClass' => Vehiculo::class, 'targetAttribute' => ['idVehiculo' => 'id']],
+        ];
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function attributeLabels()
+    {
+        return [
+            'id' => 'ID',
+            'idMedia' => 'Id Media',
+            'idVehiculo' => 'Id Vehiculo',
+            'tipo' => 'Tipo',
+            'creado' => 'Creado',
+            'modificado' => 'Modificado',
+            'eliminado' => 'Eliminado',
+        ];
+    }
+
+    /**
+     * Gets query for [[IdMedia0]].
+     *
+     * @return \yii\db\ActiveQuery
+     */
+    public function getMedia()
+    {
+        return $this->hasOne(Media::class, ['id' => 'idMedia']);
+    }
+
+    /**
+     * Gets query for [[IdVehiculo0]].
+     *
+     * @return \yii\db\ActiveQuery
+     */
+    public function getVehiculo()
+    {
+        return $this->hasOne(Vehiculo::class, ['id' => 'idVehiculo']);
+    }
+}

+ 67 - 20
modules/v1/controllers/VehiculoController.php

@@ -2,6 +2,7 @@
 
 namespace v1\controllers;
 
+use app\models\MediaVehiculo;
 use common\data\Respuesta;
 use common\rest\AuthController;
 use yii\db\Expression;
@@ -43,28 +44,74 @@ class VehiculoController extends AuthController {
 
   public function actionGuardar() {
     $id = trim($this->req->getBodyParam("id", ""));
+    $imagenes = $this->req->getBodyParam("imagenes", []);
+		$archivos = $this->req->getBodyParam("archivos", []);
     $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()) {
-      return (new Respuesta($modelo))
-        ->mensaje("Hubo un problema al guardar el vehiculo");
-    }
-
-    $modelo->refresh();
-    return (new Respuesta($modelo))
-      ->mensaje("Vehiculo guardado");
+    $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()) {
+				$transaccion->rollBack();
+				return (new Respuesta($modelo))
+					->esError()
+					->mensaje("Hubo un problema al guardar el Vehiculo");
+			}
+
+			MediaVehiculo::deleteAll(['id' => $modelo->id]);
+
+			foreach ($imagenes as $item) {
+				$id = $item['idMedia'];
+				$interMedia = new MediaVehiculo();
+
+				$interMedia->idMedia = $id;
+				$interMedia->idVehiculo = $modelo->id;
+
+				$interMedia->tipo = "IMAGEN";
+
+				if (!$interMedia->save()) {
+					$transaccion->rollBack();
+					return (new Respuesta($interMedia))
+						->mensaje("Hubo un problema al guardar la imagen {$item['nombre']}");
+				}
+			}
+
+			foreach ($archivos as $item) {
+				$id = $item['idMedia'];
+				$interMedia = new MediaVehiculo();
+
+				$interMedia->idMedia = $id;
+				$interMedia->idVehiculo = $modelo->id;
+				$interMedia->tipo = "ARCHIVO";
+
+				if (!$interMedia->save()) {
+					$transaccion->rollBack();
+					return (new Respuesta($interMedia))
+						->mensaje("Hubo un problema al guardar el archivo {$item['nombre']}");
+				}
+			}
+
+			$transaccion->commit();
+			$modelo->refresh();
+			return (new Respuesta($modelo))
+				->mensaje("Vehiculo ha sido guardado de manera exitosa");
+		} catch (\Exception $e) {
+			$transaccion->rollBack();
+			return (new Respuesta($modelo))
+				->esError()
+				->mensaje($e->getMessage());
+		}
   }
 
   public function actionEliminar() {

+ 40 - 0
modules/v1/models/MediaVehiculo.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace v1\models;
+
+use app\models\Servicio as ModeloServicio;
+use app\models\ServicioElemento;
+use app\models\Taller;
+use app\models\Vehiculo;
+use app\models\TipoServicio;
+class Servicio extends ModeloServicio {
+
+    public function fields() {
+        return [
+            'id',
+            'factura',
+            'idMedia',
+            'idVehiculo',
+            'tipo',
+            'creado',
+            'modificado',
+        ];
+    }
+
+    public function extraFields() {
+        return [
+            'media',
+            'vehiculo',
+        ];
+    }
+
+    public function getMedia()
+    {
+        return $this->hasOne(Media::class, ['id' => 'idMedia']);
+    }
+
+    public function getVehiculo()
+    {
+        return $this->hasOne(Vehiculo::class, ['id' => 'idVehiculo']);
+    }
+}