Parcourir la source

Se agrego la funcionalidad para relacionar agencia-cliente

raguilar il y a 1 an
Parent
commit
d8a48906ae

+ 42 - 0
migrations/m240202_224554_cliente.php

@@ -0,0 +1,42 @@
+<?php
+
+use yii\db\Migration;
+
+/**
+ * Class m240202_224554_cliente
+ */
+class m240202_224554_cliente extends Migration
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function safeUp()
+    {
+        $this->createTable('Agencia', [            
+            "idAgencia" => $this->primaryKey(),            
+            "id" => $this->integer(),
+            "nombre" => $this->string(50),  
+            "direccion" => $this->string(20),            
+            "contacto" => $this->string(255),  
+            "descripcion" => $this->string(255),
+            "clave" => $this->integer(),
+            "idUsuarioCreador" => $this->integer(),
+            "creado" => $this->timestamp() . " with time zone",
+            "modificado" => $this->timestamp() . " with time zone",
+            "eliminado" => $this->timestamp() . " with time zone",
+        ]);
+        
+        $this->addColumn('Usuario', 'idAgencia', $this->integer()->null());
+        
+        $this->addForeignKey('UsuarioIdAgenciaFK', 'Usuario', 'idAgencia', 'Agencia', 'idAgencia');          
+        $this->addForeignKey('AgenciaIdUsuarioFK', 'Agencia', 'id', 'Usuario', 'id');          
+    }
+
+    public function safeDown()
+    {
+        $this->dropForeignKey('UsuarioIdAgenciaFK', 'Usuario');
+        $this->dropForeignKey('AgenciaIdUsuarioFK', 'Agencia');
+        $this->dropTable("Agencia");
+        $this->dropColumn("Usuario", "idAgencia");
+    }
+}

+ 90 - 0
models/Agencia.php

@@ -0,0 +1,90 @@
+<?php
+
+namespace app\models;
+
+use Yii;
+
+/**
+ * This is the model class for table "Agencia".
+ *
+ * @property int $idAgencia
+ * @property int|null $id
+ * @property string|null $nombre
+ * @property string|null $direccion
+ * @property string|null $contacto
+ * @property string|null $descripcion
+ * @property int|null $clave
+ * @property int|null $idUsuarioCreador
+ * @property string|null $creado
+ * @property string|null $modificado
+ * @property string|null $eliminado
+ *
+ * @property Usuario $id0
+ * @property Usuario[] $usuarios
+ */
+class Agencia extends \yii\db\ActiveRecord
+{
+    /**
+     * {@inheritdoc}
+     */
+    public static function tableName()
+    {
+        return 'Agencia';
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function rules()
+    {
+        return [
+            [['id', 'clave', 'idUsuarioCreador'], 'default', 'value' => null],
+            [['id', 'clave', 'idUsuarioCreador'], 'integer'],
+            [['creado', 'modificado', 'eliminado'], 'safe'],
+            [['nombre'], 'string', 'max' => 50],
+            [['direccion'], 'string', 'max' => 20],
+            [['contacto', 'descripcion'], 'string', 'max' => 255],
+            [['id'], 'exist', 'skipOnError' => true, 'targetClass' => Usuario::class, 'targetAttribute' => ['id' => 'id']],
+        ];
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function attributeLabels()
+    {
+        return [
+            'idAgencia' => 'Id Agencia',
+            'id' => 'ID',
+            'nombre' => 'Nombre',
+            'direccion' => 'Direccion',
+            'contacto' => 'Contacto',
+            'descripcion' => 'Descripcion',
+            'clave' => 'Clave',
+            'idUsuarioCreador' => 'Id Usuario Creador',
+            'creado' => 'Creado',
+            'modificado' => 'Modificado',
+            'eliminado' => 'Eliminado',
+        ];
+    }
+
+    /**
+     * Gets query for [[Id0]].
+     *
+     * @return \yii\db\ActiveQuery
+     */
+    public function getIdUsuario()
+    {
+        return $this->hasOne(Usuario::class, ['id' => 'id']);
+    }
+
+    /**
+     * Gets query for [[Usuarios]].
+     *
+     * @return \yii\db\ActiveQuery
+     */
+    public function getUsuario()
+    {
+        return $this->hasMany(Usuario::class, ['idAgencia' => 'idAgencia']);
+    }
+}

+ 85 - 0
modules/v1/controllers/AgenciaController.php

@@ -0,0 +1,85 @@
+<?php
+
+namespace v1\controllers;
+
+use common\data\Respuesta;
+use common\rest\AuthController;
+use yii\db\Expression;
+
+class AgenciaController extends AuthController {
+
+  public $modelClass = "v1\models\Agencia";
+  public $modelName = "Agencia";
+
+  public function actionIndex() {    
+    $id = intval($this->req->get("id", ""));
+    $q = trim($this->req->get("q", ""));
+
+    $query = $this->queryInicial;
+
+    if($id > 0) {
+      $query->andWhere(["id" => $id]);
+    }
+
+    if($q !== "") {
+      /*# Ejemplo de buscador
+      $query->andWhere([
+        "OR",
+        ["ilike", "nombre", $q],
+        ["ilike", "direccion", $q],
+      ]);
+      // */
+    }
+
+    return new Respuesta($query, $this->limite, $this->pagina, $this->ordenar);
+  }
+
+  public function actionGuardar() {
+    $id = intval($this->req->getBodyParam("id", null));
+    $modelo = null;
+
+    if($id > 0) {
+      $modelo = $this->modelClass::findOne($id);
+    }
+    if($modelo === null) {
+      $modelo = new $this->modelClass();
+      $modelo->creado = new Expression('now()');
+      $modelo->idUsuarioCreador = $this->usuario->id;
+    } else {
+      $modelo->modificado = new Expression('now()');
+    }
+
+    $modelo->load($this->req->getBodyParams(), '');
+    if (!$modelo->save()) {
+      return (new Respuesta($modelo))
+        ->mensaje("Hubo un problema al guardar la {$this->modelName}");
+    }
+
+    $modelo->refresh();
+    return (new Respuesta($modelo))
+      ->mensaje("{$this->modelName} guardada correctamente");
+  }
+
+  public function actionEliminar() {
+    $id = intval($this->req->getBodyParam("id", null));
+    $modelo = null;
+
+    if($id > 0) {
+      $modelo = $this->modelClass::findOne(["id" => $id]);
+    }
+    if($modelo === null) {
+      return (new Respuesta())
+        ->esError()
+        ->mensaje("{$this->modelName} no encontrada");
+    }
+    $modelo->eliminado = null;
+    if(!$modelo->save()) {
+      return (new Respuesta($modelo))
+        ->mensaje("No se pudo eliminar la {$this->modelName}");
+    }
+
+    return (new Respuesta())
+      ->mensaje("{$this->modelName} eliminada");
+  }
+
+}

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

@@ -0,0 +1,40 @@
+<?php
+
+namespace v1\models;
+
+use app\models\Agencia as ModeloAgencia;
+
+class Agencia extends ModeloAgencia
+{
+
+    public function fields()
+    {
+        return [
+            'idAgencia',
+            'id',
+            'nombre',
+            'direccion',
+            'contacto',
+            'descripcion',
+            'clave',
+            'idUsuarioCreador',
+            'creado',
+            'modificado',
+            'eliminado'
+        ];
+    }
+
+    public function extraFields()
+    {
+        return [
+            'usuarios'            
+        ];
+    }
+
+
+    public function getUsuarios()
+    {
+        return $this->hasMany(Usuario::className(), ['id' => 'id'])->viaTable('UsuarioAgencia', ['idAgencia' => 'idAgencia']);
+    }
+    
+}