2023-07-24 20:55:26 -04:00
< ? php
namespace Incoviba\Repository ;
use Incoviba\Common\Define ;
2023-08-08 23:53:49 -04:00
use Incoviba\Common\Ideal ;
use Incoviba\Common\Implement ;
2023-07-24 20:55:26 -04:00
use Incoviba\Model ;
use Incoviba\Repository ;
class Inmobiliaria extends Ideal\Repository
{
2024-03-26 09:38:20 -03:00
public function __construct ( Define\Connection $connection , protected Contabilidad\Banco $bancoRepository , protected Repository\Inmobiliaria\TipoSociedad $tipoSociedadRepository )
2023-07-24 20:55:26 -04:00
{
parent :: __construct ( $connection );
$this -> setTable ( 'inmobiliaria' );
}
protected function getKey () : string
{
return 'rut' ;
}
2024-03-18 13:51:57 -03:00
public function create ( ? array $data = null ) : Model\Inmobiliaria
2023-07-24 20:55:26 -04:00
{
2024-05-13 16:58:33 -04:00
$map = ( new Implement\Repository\MapperParser ([ 'dv' , 'razon' , 'abreviacion' , 'sigla' ]))
2023-08-08 23:53:49 -04:00
-> register ( 'sociedad' , ( new Implement\Repository\Mapper ())
-> setProperty ( 'tipoSociedad' )
-> setFunction ( function ( $data ) {
2023-07-24 20:55:26 -04:00
return $this -> tipoSociedadRepository -> fetchById ( $data [ 'sociedad' ]);
2023-08-08 23:53:49 -04:00
}));
2023-07-24 20:55:26 -04:00
return $this -> parseData ( new Model\Inmobiliaria (), $data , $map );
}
2024-03-18 13:51:57 -03:00
public function save ( Define\Model $model ) : Model\Inmobiliaria
2023-07-24 20:55:26 -04:00
{
$model -> rut = $this -> saveNew (
[ 'dv' , 'razon' , 'abreviacion' , 'cuenta' , 'banco' , 'sociedad' ],
[ $model -> dv , $model -> razon , $model -> abreviacion , $model -> cuenta , $model -> banco -> id , $model -> tipoSociedad -> id ]
);
return $model ;
}
2024-03-18 13:51:57 -03:00
public function edit ( Define\Model $model , array $new_data ) : Model\Inmobiliaria
2023-07-24 20:55:26 -04:00
{
return $this -> update ( $model , [ 'dv' , 'razon' , 'abreviacion' , 'cuenta' , 'banco' , 'sociedad' ], $new_data );
}
2024-01-17 10:33:11 -03:00
public function fetchAllActive ( null | string | array $sorting = null ) : array
{
$query = $this -> connection -> getQueryBuilder ()
-> select ( 'a.*' )
-> from ( " { $this -> getTable () } a " )
-> joined ( 'JOIN proyecto ON a.rut = proyecto.inmobiliaria' )
-> joined ( 'JOIN (SELECT ep1.* FROM estado_proyecto ep1 JOIN (SELECT MAX(id) AS id, proyecto FROM estado_proyecto GROUP BY proyecto) ep0 ON ep0.id = ep1.id) ep ON ep.proyecto = proyecto.id' )
-> joined ( 'JOIN tipo_estado_proyecto tep ON tep.id = ep.estado' )
-> joined ( 'JOIN etapa_proyecto ON etapa_proyecto.id = tep.etapa' )
-> where ( 'etapa_proyecto.orden BETWEEN ? AND ?' );
if ( $sorting !== null ) {
$query -> order ( $sorting );
}
return $this -> fetchMany ( $query , [ 1 , 8 ]);
}
2023-07-24 20:55:26 -04:00
}