1. Inicio
  2. Documentos
  3. JavierBuildForm
  4. Mostrar formulario
  5. Dominio

Dominio

Similar al controller, se crea una clase padre que encapsula la mayoría de los métodos generales, si se quiere especificar se puede heredar directamente de

DomainBuildFormSaveLineamientos

Código de ejemplo:

<?php
/**
 *
 * Created by PhpStorm.
 * User: Javier Solis Flores ( solis.unmsm@gmail.com )
 * Date: 4/21/19
 * Time: 1:07 PM
 */

namespace App\Src\Domain\Checklist\EspecificoGeneral\Show;


use Javier\BuildForm\Show\DomainBuildFormSaveLineamientos;
use App\Models\CheckList;

use Carbon\Carbon;
use Javier\Library\String\UtilStringValidate;

class DomainCheckListEspecificoGeneralSave extends DomainBuildFormSaveLineamientos
{

    /**
     * @param $config
     * @param  $request
     * @param $finish
     * @throws \Javier\Library\Exception\MyException
     */
    public function previewValidateRun($config, $request, $finish)
    {
        $cheklist = CheckList::query()->where(CheckList::JAVIERFORM_ID,$request->JavierForm__id)->first();
        $cheklist = CheckList::cast($cheklist);

        //dd($cheklist->estado);
        if ($cheklist->estado == \ConstantesCheckListEstado::FINALIZADO)
        {
            $this->estaFinalizado = true;
            throw $this->makeMyExceptionMsg('El Checklist ya se encuentra finalizado.');
        }

        if(\Auth::id()!=$cheklist->users_id){
            throw $this->makeMyExceptionMsg('El Checklist fue iniciando por otro usuario, no puede editarlo ni finalizarlo.');
        }



    }


    /**
     * @param $rowsValueCustom
     * $rowsValueCustom[$cabecera["alias"]]=[
        "alias"=>$alias,
        "alias_show"=>$aliasShow,
        "response"=>$responses[$alias]
        ];
     */
    public function validateCustomByCabeceraAlias($rowsValueCustom)
    {

        //dd($rowsValueCustom);
        //no se valida si existe porque eso lo hace la validacion propia del buildform
        if(!key_exists("cumple",$rowsValueCustom)){
            return;
        }

        $cumple = $rowsValueCustom["cumple"]["response"];
        $obs = $rowsValueCustom["obs"]["response"];

        //si cumple no se valida los demas datos
        if($cumple=="c"){
            return;
        }

        //si no cumple o no aplica, debe indicarse los otros datos
        $aliasImagen = $rowsValueCustom["imagen"]["alias"];
        if(!$this->responseSaved->has($aliasImagen)){
            //dd("entro");
            $aliasShow = $rowsValueCustom["imagen"]["alias_show"];
            $this->errors[$aliasImagen."__custom_validate_imagen"] = ["Debe cargar una imágen en la pregunta $aliasShow"];
        }
        //dd("paso");


        if(UtilStringValidate::IsNullOrEmptyString($obs)){
            $alias = $rowsValueCustom["obs"]["alias"];
            $aliasShow = $rowsValueCustom["obs"]["alias_show"];

            $this->errors[$alias."__custom_validate_obs"] = ["Debe escribir la observación en la pregunta $aliasShow"];
        }



    }


    public function finishjavierForm($request)
   {

       $cheklist = CheckList::query()->where(CheckList::JAVIERFORM_ID,$request->JavierForm__id)->first();
       $cheklist = CheckList::cast($cheklist);

       $cheklist->estado = \ConstantesCheckListEstado::FINALIZADO;
       $cheklist->fecha_fin = Carbon::now();

       $cheklist->save();
   }
}

Métodos:

previewValidateRun , validación que ocurre siempre así sea salvado o finalizado ( save o finish ), dependerá de cada caso.

validateCustomByCabeceraAlias , se llama solo cuando se llama al método finalizar, se envía como parámetro una fila con todas las respuestas enviadas por el request por cada fila.

$rowsValueCustom[$cabecera["alias"]]=[
    "alias"=>$alias,
    "alias_show"=>$aliasShow,
    "response"=>$responses[$alias]
    ];

Donde, cada llave es un alias de la cabecera de la columna, ( solo las cabeceras que incluyen repuestas, las que solo muestran datos no se incluyen, esto para optimizar el tiempo de ejecución)

De cada respuesta se obtiene su “alias” ( alias en DB ), “alias_show” ( alias que muestra ), y “response” ( valor de la respuesta )

NOTA: Para el caso de archivos las respuestas enviadas en el request esta vacío, esto porque el archivo se carga proceso aparte, para validar si fue cargado se valida contra las respuestas guardadas anteriormente

finishjavierForm , este método se llama cuando se finaliza el formulario, dependiendo del caso pueden implementar lo que pasaría cuando finaliza un formulario.

Como ejemplo también se debe considerar asociar la tabla JavierForm al checklist principal

/**
     * @param CheckList $newCheckList
     */
    private function crearJavierForm($newCheckList)
    {
        $javierForm = new JavierForm();
        $javierForm->ref_table = 1;
        $javierForm->ref_id = $newCheckList->id;
        $javierForm->ref_tipo = $newCheckList->tipo;
        $javierForm->save();

        $newCheckList->JavierForm_id = $javierForm->id;
        $newCheckList->save();
    }