<?php
namespace App\Model;


class Presupuesto extends GenericObject
{


    static $has_many = array(
        array('items', 'class_name' => 'PresupuestoItem', 'foreign_key' => 'pit_nropsp')
    );

    static $table_name = 'presu';

    static $primary_key = 'psp_numero';


    public function cargar($data){
        $this->psp_fecha = $data->fecha;
        $this->psp_hora = $data->hora;
        if(isset($data->nroLegal)){
            $this->psp_nrotim = $data->timbrado;
            $this->psp_nropex = $data->puntoExpedicion;
            $this->psp_nroest = $data->establecimiento;
            $this->psp_nlegal = $data->nroLegal;
            $this->psp_legini = $data->nroLegalBase;
        }
        if($this->psp_estado == null)
            $this->psp_estado = 'e';
        else
            $this->psp_estado = 'm';
        if($data->update == "none")
            $this->psp_update = date("Y-m-d h:i:s");
        else
            $this->psp_update = $data->update;
        if($data->deposito != null)
            $this->psp_coddep = $data->deposito->id;
        else
            $this->psp_coddep = null;
        if($data->comprobante != null)
            $this->psp_codcpb = $data->comprobante->id;
        else
            $this->psp_codcpb = null;
        $this->psp_codvdd = $data->vendedor->id;
        $this->psp_codcli = $data->cliente->id;
        $this->psp_codcan = $data->codigoCanal;
        $this->psp_codcnd = $data->codigoCondicion;
        $this->psp_obse = $data->observacion;
        $this->psp_lati = $data->latitud;
        $this->psp_longi = $data->longitud;
        $this->psp_refrel = $data->id;

    }

    private static function getClienteBorrado()
    {
        return json_encode([
            "id" => "099999",
            "nombre" => "Cliente Forzado Borrado",
            "ruc" => "099999",
            "telefono" => null,
            "direccion" => null,
            "codigoCanal" => null,
            "zona" => null,
            "vendedor" => null
        ]);
    }

    private static function getVendedorBorrado()
    {
        return json_encode([
            "id" => "099999",
            "nombre" => "Vendedor Forzado Borrado",
            "activo" => false
        ]);
    }

    public static function toJSON($result)
    {
        if ($result === null) return $result;
        $temp = array();
        if(!isset($result->psp_numero)){
            foreach($result as $item){
                $cliente = null;
                try {
                    $cliente = Cliente::toJSON(Cliente::find($item->psp_codcli));
                } catch (\Throwable $th) {
                    $cliente = Presupuesto::getClienteBorrado();
                }
                $vendedor = null;
                try {
                    $vendedor = Vendedor::toJSON(Vendedor::find($item->psp_codvdd));
                } catch (\Throwable $th) {
                    $vendedor = Presupuesto::getVendedorBorrado();
                }
                $deposito = null;
                if($item->psp_coddep != null)
                    $deposito = Deposito::toJSON(Deposito::find($item->psp_coddep));
                $comprobante = null;
                if($item->psp_codcpb != null)
                    $comprobante = Comprobante::toJSON(Comprobante::find($item->psp_codcpb));
                $items = PresupuestoItem::toJSON($item->items);
                $object = array(
                    "codigoPresupuesto" => $item->psp_numero,
                    "fecha" => $item->psp_fecha->format('Y-m-d'),
                    "hora" => $item->psp_hora,
                    "timbrado" => $item->psp_nrotim,
                    "puntoExpedicion" => $item->psp_nropex,
                    "establecimiento" => $item->psp_nroest,
                    "nroLegal" => $item->psp_nlegal,
                    "nroLegalBase" => $item->psp_legini,
                    "observacion" => $item->psp_obse,
                    "longitud" => $item->psp_longi,
                    "latitud" => $item->psp_lati,
                    "estado" => strtolower($item->psp_estado),
                    "cliente" => json_decode($cliente),
                    "vendedor" => json_decode($vendedor),
                    "deposito" => ($deposito==null)?null:json_decode($deposito),
                    "codigoCanal" => $item->psp_codcan,
                    "codigoCondicion" => $item->psp_codcnd,
                    "comprobante" => ($comprobante==null)?null:json_decode($comprobante),
                    "update" => $item->psp_update->format('Y-m-d h:i:s'),
                    "itemsPresupuesto" => json_decode($items)
                );
                $temp[] = $object;
            }
        }else{
            $cliente = Cliente::toJSON(Cliente::find($result->psp_codcli));
            $vendedor = Vendedor::toJSON(Vendedor::find($result->psp_codvdd));
            $deposito = null;
            if($result->psp_coddep != null)
                $deposito = Deposito::toJSON(Deposito::find($result->psp_coddep));
            $comprobante = null;
            if($result->psp_codcpb != null)
                $comprobante = Comprobante::toJSON(Comprobante::find($result->psp_codcpb));
            $items = PresupuestoItem::toJSON($result->items);
            $temp = array(
                "codigoPresupuesto" => $result->psp_numero,
                "fecha" => $result->psp_fecha->format('Y-m-d'),
                "hora" => $result->psp_hora,
                "timbrado" => $result->psp_nrotim,
                "puntoExpedicion" => $result->psp_nropex,
                "establecimiento" => $result->psp_nroest,
                "nroLegal" => $result->psp_nlegal,
                "nroLegalBase" => $result->psp_legini,
                "estado" => strtolower($result->psp_estado),
                "cliente" => json_decode($cliente),
                "vendedor" => json_decode($vendedor),
                "deposito" => ($deposito==null)?null:json_decode($deposito),
                "codigoCanal" => $result->psp_codcan,
                "codigoCondicion" => $result->psp_codcnd,
                "comprobante" => ($comprobante==null)?null:json_decode($comprobante),
                "update" => $result->psp_update->format('Y-m-d h:i:s'),
                "itemsPresupuesto" => json_decode($items)
            );
        }
        return json_encode($temp);
    }
}