Selaa lähdekoodia

Se agrego FK a media de modulo de banner y se agrego modulo de banner modelos y controlador

Jose Cienfuegos 5 kuukautta sitten
vanhempi
commit
9a95dea960

+ 19 - 0
migrations/m241123_222337_llave_foranea_banner.php

@@ -0,0 +1,19 @@
+<?php
+
+use yii\db\Migration;
+
+/**
+ * Class m241123_222337_llave_foranea_banner
+ */
+class m241123_222337_llave_foranea_banner extends Migration
+{
+    public function safeUp()
+    {
+        $this->addForeignKey('BannerMediaFK', 'Banner', 'idMedia', 'Media', 'id');
+    }
+
+    public function safeDown()
+    {
+        $this->dropForeignKey('BannerMediaFK', 'Banner');
+    }
+}

+ 83 - 0
models/Banner.php

@@ -0,0 +1,83 @@
+<?php
+
+namespace app\models;
+
+use Yii;
+
+/**
+ * This is the model class for table "Banner".
+ *
+ * @property string $id
+ * @property string|null $idCampana
+ * @property string|null $idMedia
+ * @property string|null $nombre
+ * @property string|null $tamano
+ * @property string|null $descripcion
+ * @property bool|null $activo
+ * @property string|null $fechaInicio
+ * @property string|null $fechaFin
+ * @property string|null $creado
+ * @property string|null $modificado
+ * @property string|null $eliminado
+ *
+ * @property Campana $idCampana0
+ * @property Media $idMedia0
+ */
+class Banner extends ModeloBase
+{
+    /**
+     * {@inheritdoc}
+     */
+    public static function tableName()
+    {
+        return 'Banner';
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function rules()
+    {
+        return [
+            [['id'], 'required'],
+            [['descripcion'], 'string'],
+            [['activo'], 'boolean'],
+            [['fechaInicio', 'fechaFin', 'creado', 'modificado', 'eliminado'], 'safe'],
+            [['id', 'idCampana', 'idMedia'], 'string', 'max' => 36],
+            [['nombre', 'tamano'], 'string', 'max' => 255],
+            [['id'], 'unique'],
+            [['idCampana'], 'exist', 'skipOnError' => true, 'targetClass' => Campana::class, 'targetAttribute' => ['idCampana' => 'id']],
+        ];
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function attributeLabels()
+    {
+        return [
+            'id' => 'ID',
+            'idCampana' => 'Id Campana',
+            'idMedia' => 'Id Media',
+            'nombre' => 'Nombre',
+            'tamano' => 'Tamano',
+            'descripcion' => 'Descripcion',
+            'activo' => 'Activo',
+            'fechaInicio' => 'Fecha Inicio',
+            'fechaFin' => 'Fecha Fin',
+            'creado' => 'Creado',
+            'modificado' => 'Modificado',
+            'eliminado' => 'Eliminado',
+        ];
+    }
+
+    public function getCampana()
+    {
+        return $this->hasOne(Campana::class, ['id' => 'idCampana']);
+    }
+
+    public function getMedia()
+    {
+        return $this->hasOne(Media::class, ['id' => 'idMedia']);
+    }
+}

+ 90 - 0
modules/v1/controllers/BannerController.php

@@ -0,0 +1,90 @@
+<?php
+
+namespace v1\controllers;
+
+use common\data\Respuesta;
+use common\rest\AuthController;
+use yii\db\Expression;
+
+class BannerController extends AuthController {
+
+  public $modelClass = "v1\models\Banner";
+
+  public function actionIndex() {
+    $id = trim($this->req->get("id", ""));
+    $buscar = trim($this->req->get("q", ""));
+
+    $query = $this->queryInicial;
+
+    if($id > 0) {
+      $query->andWhere(["id" => $id]);
+    }
+
+    if($buscar) {
+      
+      $query->andWhere([
+        "OR",
+        ["ilike", "nombre", $buscar]
+      ]);
+
+    }
+
+    return new Respuesta($query, $this->limite, $this->pagina, $this->ordenar);
+  }
+
+  public function actionGuardar() {
+    $id = trim($this->req->getBodyParam("id", ""));
+    $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 (empty($archivos)) {
+      $modelo->idMedia = null;
+    } else {
+      $modelo->idMedia = $archivos[0]['idMedia'];
+    }
+
+    if (!$modelo->save()) {
+      return (new Respuesta($modelo))
+        ->mensaje("Hubo un problema al guardar el Banner");
+    }
+
+    $modelo->refresh();
+    return (new Respuesta($modelo))
+      ->mensaje("Banner guardado");
+  }
+
+  public function actionEliminar() {
+    $id = trim($this->req->getBodyParam("id", ""));
+    $modelo = null;
+
+    if($id !== "") {
+      $modelo = $this->modelClass::findOne(["id" => $id]);
+    }
+    if($modelo === null) {
+      return (new Respuesta())
+        ->esError()
+        ->mensaje("Banner no encontrado");
+    }
+    $modelo->eliminado = new Expression('now()');
+    if(!$modelo->save()) {
+      return (new Respuesta($modelo))
+        ->mensaje("No se pudo eliminar el Banner");
+    }
+
+    return (new Respuesta())
+      ->mensaje("Banner eliminado");
+  }
+}

+ 0 - 1
modules/v1/controllers/CampanaController.php

@@ -35,7 +35,6 @@ class CampanaController extends AuthController {
   public function actionGuardar() {
     $id = trim($this->req->getBodyParam("id", ""));
     $archivos = $this->req->getBodyParam("archivos", []);
-    $archivosEliminados = $this->req->getBodyParam("archivosEliminados", []);
     $modelo = null;
 
     if ($id !== "") {

+ 41 - 0
modules/v1/models/Banner.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace v1\models;
+
+use app\models\Banner as ModeloBanner;
+
+class Banner extends ModeloBanner {
+
+  public function fields() {
+    return [
+        'id',
+        'idCampana',
+        'idMedia',
+        'nombre',
+        'tamano',
+        'descripcion',
+        'activo',
+        'fechaInicio',
+        'fechaFin',
+        'creado',
+        'modificado',
+    ];
+  }
+
+  public function extraFields() {
+    return [
+        'campana',
+        'media'
+    ];
+}
+
+  public function getCampana()
+  {
+      return $this->hasOne(Campana::class, ['id' => 'idCampana']);
+  }
+
+  public function getMedia()
+  {
+      return $this->hasOne(Media::class, ['id' => 'idMedia']);
+  }
+}