45 lines
1.2 KiB
PHP
45 lines
1.2 KiB
PHP
|
<?php
|
||
|
namespace App\Controller\API;
|
||
|
|
||
|
use App\Definition\Controller;
|
||
|
use Incoviba\old\Proyecto\Proyecto;
|
||
|
use Incoviba\old\Venta\Unidad;
|
||
|
|
||
|
class Unidades {
|
||
|
use Controller;
|
||
|
|
||
|
public static function unidades_no_reservadas() {
|
||
|
$id_proyecto = get('proyecto');
|
||
|
$id_tipo = get('tipo');
|
||
|
$proyecto = model(Proyecto::class)->findOne($id_proyecto);
|
||
|
if (!$proyecto) {
|
||
|
throw new \InvalidArgumentException('Proyecto identificado por ' . $id_proyecto . ' no existe.');
|
||
|
}
|
||
|
$unidades = $proyecto->unidades($id_tipo);
|
||
|
$unidades = array_filter($unidades, function($item) {
|
||
|
return !$item->isReservada();
|
||
|
});
|
||
|
$unidades = array_map(function($item) {
|
||
|
return $item->asArray();
|
||
|
}, $unidades);
|
||
|
usort($unidades, function($a, $b) {
|
||
|
$ap = strpos($a['descripcion'], ' ');
|
||
|
$ad = $a['descripcion'];
|
||
|
if ($ap != false) {
|
||
|
$ad = substr($ad, 0, $ap);
|
||
|
}
|
||
|
$bd = $b['descripcion'];
|
||
|
$bp = strpos($b['descripcion'], ' ');
|
||
|
if ($bp != false) {
|
||
|
$bd = substr($bd, 0, $bp);
|
||
|
}
|
||
|
return strcmp(
|
||
|
str_pad($ad, 4, '0', \STR_PAD_LEFT),
|
||
|
str_pad($bd, 4, '0', \STR_PAD_LEFT)
|
||
|
);
|
||
|
});
|
||
|
$output = array_values($unidades);
|
||
|
return json_encode($output);
|
||
|
}
|
||
|
}
|