old models
This commit is contained in:
225
src/old/Venta/Pie.php
Normal file
225
src/old/Venta/Pie.php
Normal file
@ -0,0 +1,225 @@
|
||||
<?php
|
||||
namespace Incoviba\old\Venta;
|
||||
|
||||
use Incoviba\Common\Alias\OldModel as Model;
|
||||
use Carbon\Carbon;
|
||||
|
||||
/**
|
||||
*
|
||||
* @property int id
|
||||
* @property date fecha
|
||||
* @property float valor
|
||||
* @property float uf
|
||||
* @property int cuotas
|
||||
* @property int asociado
|
||||
* @property int reajuste
|
||||
*
|
||||
*/
|
||||
class Pie extends Model
|
||||
{
|
||||
public function cuotas($order = 'numero')
|
||||
{
|
||||
if ($this->asociado != 0) {
|
||||
return $this->asociado()->cuotas();
|
||||
}
|
||||
$cuotas = $this->hasMany(Cuota::class, 'pie')
|
||||
->select('cuota.*')
|
||||
->join('pago', ['pago.id', '=', 'cuota.pago'])
|
||||
->rawJoin('JOIN (SELECT e1.* FROM (SELECT pago, MAX(id) AS id FROM estado_pago GROUP BY pago) e0 JOIN estado_pago e1 ON e1.id = e0.id)', ['ep.pago', '=', 'pago.id'], 'ep')
|
||||
->join('tipo_estado_pago', ['tipo_estado_pago.id', '=', 'ep.estado'])
|
||||
->whereNotEqual('tipo_estado_pago.descripcion', 'reemplazado')
|
||||
->whereNotEqual('tipo_estado_pago.descripcion', 'anulado');
|
||||
switch ($order) {
|
||||
case 'numero':
|
||||
case 'number':
|
||||
default:
|
||||
$cuotas = $cuotas->orderByAsc('cuota.numero');
|
||||
case 'fecha':
|
||||
case 'date':
|
||||
$cuotas = $cuotas->orderByAsc('pago.fecha')
|
||||
->orderByDesc('pago.valor');
|
||||
break;
|
||||
}
|
||||
$cuotas = $cuotas->findMany();
|
||||
return $cuotas;
|
||||
}
|
||||
public function pagadas()
|
||||
{
|
||||
$estado = model(TipoEstadoPago::class)->where('descripcion', 'depositado')->findOne();
|
||||
$cuotas = $this->cuotas();
|
||||
foreach ($cuotas as $i => &$cuota) {
|
||||
if ($cuota->pago()->estado()->estado < $estado->id) {
|
||||
unset($cuotas[$i]);
|
||||
}
|
||||
}
|
||||
array_values($cuotas);
|
||||
return $cuotas;
|
||||
}
|
||||
public function abonadas()
|
||||
{
|
||||
$estado = model(TipoEstadoPago::class)->where('descripcion', 'abonado')->findOne();
|
||||
$cuotas = $this->pagadas();
|
||||
foreach ($cuotas as $i => &$cuota) {
|
||||
if ($cuota->pago()->estado()->estado != $estado->id) {
|
||||
unset($cuotas[$i]);
|
||||
}
|
||||
}
|
||||
array_values($cuotas);
|
||||
return $cuotas;
|
||||
}
|
||||
public function rebotadas()
|
||||
{
|
||||
$estado = model(TipoEstadoPago::class)->where('descripcion', 'devuelto')->findOne();
|
||||
$cuotas = $this->cuotas();
|
||||
foreach ($cuotas as $i => &$cuota) {
|
||||
if ($cuota->pago()->estado()->estado != $estado->id) {
|
||||
unset($cuotas[$i]);
|
||||
}
|
||||
}
|
||||
array_values($cuotas);
|
||||
return $cuotas;
|
||||
}
|
||||
public function valorPesos()
|
||||
{
|
||||
return $this->valor * $this->uf();
|
||||
}
|
||||
public function valorPagado($tipo = 'uf')
|
||||
{
|
||||
$cuotas = $this->pagadas();
|
||||
$sum = 0;
|
||||
foreach ($cuotas as $cuota) {
|
||||
$pago = $cuota->pago();
|
||||
if ($tipo == 'uf' or $tipo == 'ufs') {
|
||||
if ($pago->uf() == 0) {
|
||||
$sum += $pago->valor / $this->uf();
|
||||
continue;
|
||||
}
|
||||
$sum += $pago->valor / $pago->uf();
|
||||
} else {
|
||||
$sum += $pago->valor;
|
||||
}
|
||||
}
|
||||
|
||||
return $sum * $this->proporcion();
|
||||
}
|
||||
public function valorAbonado($tipo = 'uf')
|
||||
{
|
||||
$cuotas = $this->abonadas();
|
||||
$sum = 0;
|
||||
foreach ($cuotas as $cuota) {
|
||||
$pago = $cuota->pago();
|
||||
if ($tipo == 'uf' or $tipo == 'ufs') {
|
||||
if ($pago->uf() == 0) {
|
||||
$sum += $pago->valor / $this->uf();
|
||||
continue;
|
||||
}
|
||||
$sum += $pago->valor / $pago->uf;
|
||||
} else {
|
||||
$sum += $pago->valor;
|
||||
}
|
||||
}
|
||||
|
||||
return $sum * $this->proporcion();
|
||||
}
|
||||
public function reajuste()
|
||||
{
|
||||
$reajuste = $this->belongsTo(Pago::class, 'reajuste');
|
||||
if ($reajuste) {
|
||||
$reajuste = $reajuste->findOne();
|
||||
return $reajuste;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
public function venta()
|
||||
{
|
||||
return $this->has_one(Venta::class, 'pie')->findOne();
|
||||
}
|
||||
public function asociado()
|
||||
{
|
||||
$pie = $this->belongs_to(Pie::class, 'asociado')->findOne();
|
||||
if ($pie) {
|
||||
return $pie;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
private $asociados = null;
|
||||
public function asociados()
|
||||
{
|
||||
if ($this->asociados == null) {
|
||||
$pie = $this->has_many(Pie::class, 'asociado');
|
||||
if (!$pie) {
|
||||
return null;
|
||||
}
|
||||
$asociados = $pie->findMany();
|
||||
usort($asociados, function($a, $b) {
|
||||
return strcmp($a->venta()->unidad()->descripcion, $b->venta()->unidad()->descripcion);
|
||||
});
|
||||
$this->asociados = $asociados;
|
||||
}
|
||||
return $this->asociados;
|
||||
}
|
||||
public function proporcion()
|
||||
{
|
||||
$pie = $this;
|
||||
if ($this->asociado != 0) {
|
||||
$pie = $this->asociado();
|
||||
}
|
||||
if ($pie->asociados() != null) {
|
||||
$pies = $pie->asociados();
|
||||
$base = $pie->valor;
|
||||
foreach ($pies as $p) {
|
||||
$base += $p->valor;
|
||||
}
|
||||
|
||||
return $this->valor / $base;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
public function pendientes()
|
||||
{
|
||||
return count($this->cuotas()) - count($this->pagadas());
|
||||
}
|
||||
public function pagos($estado = 0)
|
||||
{
|
||||
$pagos = model(Pago::class)
|
||||
->select('pago.*')
|
||||
->join('cuota', ['cuota.pago', '=', 'pago.id'])
|
||||
->filter('filterEstado')
|
||||
->where('estado_pago.estado', $estado)
|
||||
->where('cuota.pie', $this->id)
|
||||
->findMany();
|
||||
if ($this->reajuste != 0 and $this->reajuste()->estado()->estado == $estado) {
|
||||
$pagos []= $this->reajuste();
|
||||
}
|
||||
return $pagos;
|
||||
}
|
||||
public function uf()
|
||||
{
|
||||
if ($this->uf == 0) {
|
||||
$uf = uf($this->fecha);
|
||||
if (!$uf) {
|
||||
return 1;
|
||||
}
|
||||
if ($uf->total > 0) {
|
||||
$this->uf = $uf->uf->value;
|
||||
$this->save();
|
||||
}
|
||||
}
|
||||
return $this->uf;
|
||||
}
|
||||
public function valor($tipo = 'pesos')
|
||||
{
|
||||
switch ($tipo) {
|
||||
case 'uf':
|
||||
case 'ufs':
|
||||
return $this->valor;
|
||||
break;
|
||||
case 'peso':
|
||||
case 'pesos':
|
||||
default:
|
||||
return $this->valorPesos();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
Reference in New Issue
Block a user