Edit reservation
This commit is contained in:
@ -35,11 +35,11 @@ abstract class API extends Ideal\Service
|
||||
|
||||
/**
|
||||
* @param Define\Model $model
|
||||
* @param array $new_data
|
||||
* @param array $newData
|
||||
* @return Define\Model
|
||||
* @throws ServiceAction\Update
|
||||
*/
|
||||
abstract public function edit(Define\Model $model, array $new_data): Define\Model;
|
||||
abstract public function edit(Define\Model $model, array $newData): Define\Model;
|
||||
|
||||
/**
|
||||
* @param int $id
|
||||
|
||||
@ -108,7 +108,7 @@ class Reservations
|
||||
$output = [
|
||||
'input' => $input,
|
||||
'reservation_id' => $reservation_id,
|
||||
'reservations' => null,
|
||||
'reservation' => null,
|
||||
'success' => false,
|
||||
];
|
||||
|
||||
|
||||
@ -87,6 +87,7 @@ class Reservation extends Common\Ideal\Repository
|
||||
$this->editUnits($model, $new_data);
|
||||
$this->editPromotions($model, $new_data);
|
||||
$this->editBroker($model, $new_data);
|
||||
$this->editPayment($model, $new_data);
|
||||
return $model;
|
||||
}
|
||||
|
||||
@ -515,6 +516,7 @@ class Reservation extends Common\Ideal\Repository
|
||||
$reservation->units[$idx]['value'] = $unit['value'];
|
||||
}
|
||||
}
|
||||
|
||||
protected function editBroker(Model\Venta\Reservation &$reservation, array $new_data): void
|
||||
{
|
||||
if (!array_key_exists('broker_rut', $new_data) or $new_data['broker_rut'] === $reservation->broker->rut) {
|
||||
@ -530,8 +532,8 @@ class Reservation extends Common\Ideal\Repository
|
||||
'type' => Model\Venta\Reservation\Detail\Type::Broker->value,
|
||||
'broker_rut' => $new_data['broker_rut']
|
||||
]);
|
||||
$reservation->broker = $this->brokerService->fetchById($new_data['broker_rut']);
|
||||
} catch (PDOException) {}
|
||||
$reservation->broker = $this->brokerService->get($new_data['broker_rut']);
|
||||
} catch (PDOException|Read) {}
|
||||
}
|
||||
protected function editPromotions(Model\Venta\Reservation &$reservation, array $new_data): void
|
||||
{
|
||||
|
||||
@ -4,6 +4,7 @@ namespace Incoviba\Service\Venta;
|
||||
use DateMalformedStringException;
|
||||
use Exception;
|
||||
use DateTimeImmutable;
|
||||
use Incoviba\Exception\ServiceAction\Update;
|
||||
use PDOException;
|
||||
use Psr\Log\LoggerInterface;
|
||||
use Incoviba\Common\Ideal;
|
||||
@ -85,13 +86,20 @@ class Credito extends Ideal\Service
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws Exception
|
||||
* @param Model\Venta\Credito $credito
|
||||
* @param array $data
|
||||
* @return Model\Venta\Credito
|
||||
* @throws Update
|
||||
*/
|
||||
public function edit(Model\Venta\Credito $credito, array $data): Model\Venta\Credito
|
||||
{
|
||||
$uf = $this->moneyService->getUF($credito->pago->fecha);
|
||||
if (array_key_exists('fecha', $data)) {
|
||||
$fecha = new DateTimeImmutable($data['fecha']);
|
||||
try {
|
||||
$fecha = new DateTimeImmutable($data['fecha']);
|
||||
} catch (DateMalformedStringException $exception) {
|
||||
throw new Update(__CLASS__, $exception);
|
||||
}
|
||||
$data['fecha'] = $fecha->format('Y-m-d');
|
||||
$uf = $this->moneyService->getUF($fecha);
|
||||
$data['uf'] = $uf;
|
||||
@ -112,6 +120,10 @@ class Credito extends Ideal\Service
|
||||
}
|
||||
$credito->pago = $this->pagoService->edit($credito->pago, $filteredDataPago);
|
||||
|
||||
return $this->creditoRepository->edit($credito, $filteredData);
|
||||
try {
|
||||
return $this->creditoRepository->edit($credito, $filteredData);
|
||||
} catch (EmptyResult $exception) {
|
||||
throw new Update(__CLASS__, $exception);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -22,7 +22,9 @@ class Reservation extends Ideal\Service\API
|
||||
protected Repository\Venta\Reservation\State $stateRepository,
|
||||
protected Service\Persona $personaService,
|
||||
protected Service\Proyecto\Broker $brokerService,
|
||||
protected Promotion $promotionService, protected Unidad $unitService)
|
||||
protected Promotion $promotionService, protected Unidad $unitService,
|
||||
protected Pie $pieService, protected Credito $creditService,
|
||||
protected Subsidio $subsidyService)
|
||||
{
|
||||
parent::__construct($logger);
|
||||
}
|
||||
@ -131,13 +133,16 @@ class Reservation extends Ideal\Service\API
|
||||
return $this->createNewReservation($data, $date);
|
||||
}
|
||||
}
|
||||
public function edit(Define\Model $model, array $new_data): Model\Venta\Reservation
|
||||
public function edit(Define\Model $model, array $newData): Model\Venta\Reservation
|
||||
{
|
||||
try {
|
||||
return $this->process($this->reservationRepository->edit($model, $new_data));
|
||||
$reservation = $this->reservationRepository->edit($model, $newData);
|
||||
} catch (PDOException | Implement\Exception\EmptyResult $exception) {
|
||||
throw new ServiceAction\Update(__CLASS__, $exception);
|
||||
}
|
||||
$paymentData = array_filter($newData, fn($key) => str_starts_with($key, 'payment_'), ARRAY_FILTER_USE_KEY);
|
||||
$this->editPayment($reservation, $paymentData);
|
||||
return $this->process($reservation);
|
||||
}
|
||||
public function delete(int $id): Model\Venta\Reservation
|
||||
{
|
||||
@ -290,6 +295,49 @@ class Reservation extends Ideal\Service\API
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Model\Venta\Reservation $reservation
|
||||
* @param array $data
|
||||
* @return void
|
||||
* @throws ServiceAction\Update
|
||||
*/
|
||||
protected function editPayment(Model\Venta\Reservation $reservation, array $data): void
|
||||
{
|
||||
$fields = [
|
||||
'pie',
|
||||
'advance',
|
||||
'cuotas',
|
||||
'investments',
|
||||
'credito',
|
||||
'credit',
|
||||
'subsidio',
|
||||
'subsidy',
|
||||
'ahorro',
|
||||
'savings',
|
||||
];
|
||||
$filteredData = array_intersect_key($data, array_flip($fields));
|
||||
$map = [
|
||||
'pie' => 'advance',
|
||||
'cuotas' => 'investments',
|
||||
'credito' => 'credit',
|
||||
'subsidio' => 'subsidy',
|
||||
'ahorro' => 'savings'
|
||||
];
|
||||
$mappedData = [];
|
||||
foreach ($filteredData as $key => $value) {
|
||||
$mappedData[$map[$key]] = $value;
|
||||
}
|
||||
if (array_key_exists('advance', $mappedData)) {
|
||||
$this->editAdvance($reservation, $mappedData);
|
||||
}
|
||||
if (array_key_exists('credit', $mappedData)) {
|
||||
$this->editCredit($reservation, $mappedData);
|
||||
}
|
||||
/*if (array_key_exists('subsidy', $mappedData)) {
|
||||
$this->editSubsidy($reservation, $mappedData);
|
||||
}*/
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Model\Venta\Reservation $reservation
|
||||
* @param array $data
|
||||
@ -316,6 +364,40 @@ class Reservation extends Ideal\Service\API
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Model\Venta\Reservation $reservation
|
||||
* @param array $data
|
||||
* @return void
|
||||
* @throws ServiceAction\Update
|
||||
*/
|
||||
protected function editAdvance(Model\Venta\Reservation $reservation, array $data): void
|
||||
{
|
||||
$fields = [
|
||||
'advance',
|
||||
'investments'
|
||||
];
|
||||
$filteredData = array_intersect_key($data, array_flip($fields));
|
||||
$inputData = [
|
||||
'fecha' => $reservation->date->format('Y-m-d'),
|
||||
'valor' => $filteredData['advance'],
|
||||
'cuotas' => $filteredData['investments']
|
||||
];
|
||||
if (isset($reservation->payment) and isset($reservation->payment->pie)) {
|
||||
$this->pieService->edit($reservation->payment->pie, $inputData);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
$pie = $this->pieService->add($inputData);
|
||||
} catch (ServiceAction\Create $exception) {
|
||||
throw new ServiceAction\Update(__CLASS__, $exception);
|
||||
}
|
||||
try {
|
||||
$this->reservationRepository->saveDetail($reservation, Model\Venta\Reservation\Detail\Type::Advance->value, $pie->id);
|
||||
} catch (PDOException $exception) {
|
||||
throw new ServiceAction\Update(__CLASS__, $exception);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Model\Venta\Reservation $reservation
|
||||
* @param array $data
|
||||
@ -337,6 +419,35 @@ class Reservation extends Ideal\Service\API
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Model\Venta\Reservation $reservation
|
||||
* @param array $data
|
||||
* @return void
|
||||
* @throws ServiceAction\Update
|
||||
*/
|
||||
protected function editCredit(Model\Venta\Reservation $reservation, array $data): void
|
||||
{
|
||||
$creditValue = $data['credit'];
|
||||
$inputData = [
|
||||
'fecha' => $reservation->date->format('Y-m-d'),
|
||||
'valor' => $creditValue
|
||||
];
|
||||
if (isset($reservation->payment) and isset($reservation->payment->credito)) {
|
||||
$this->creditService->edit($reservation->payment->credito, $inputData);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
$credit = $this->creditService->add($inputData);
|
||||
} catch (ServiceAction\Create $exception) {
|
||||
throw new ServiceAction\Update(__CLASS__, $exception);
|
||||
}
|
||||
try {
|
||||
$this->reservationRepository->saveDetail($reservation, Model\Venta\Reservation\Detail\Type::Credit->value, $credit->id);
|
||||
} catch (PDOException $exception) {
|
||||
throw new ServiceAction\Update(__CLASS__, $exception);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Model\Venta\Reservation $reservation
|
||||
* @param array $data
|
||||
@ -363,6 +474,40 @@ class Reservation extends Ideal\Service\API
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Model\Venta\Reservation $reservation
|
||||
* @param array $data
|
||||
* @return void
|
||||
* @throws ServiceAction\Update
|
||||
*/
|
||||
/*protected function editSubsidy(Model\Venta\Reservation $reservation, array $data): void
|
||||
{
|
||||
$fields = [
|
||||
'subsidy',
|
||||
'savings'
|
||||
];
|
||||
$filteredData = array_intersect_key($data, array_flip($fields));
|
||||
$inputData = [
|
||||
'fecha' => $reservation->date->format('Y-m-d'),
|
||||
'subsidio' => $filteredData['subsidy'],
|
||||
'ahorro' => $filteredData['savings']
|
||||
];
|
||||
if (isset($reservation->payment) and isset($reservation->payment->subsidy)) {
|
||||
$this->subsidyService->edit($reservation->payment->subsidy, $inputData);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
$subsidy = $this->subsidyService->add($inputData);
|
||||
} catch (ServiceAction\Create $exception) {
|
||||
throw new ServiceAction\Update(__CLASS__, $exception);
|
||||
}
|
||||
try {
|
||||
$this->reservationRepository->saveDetail($reservation, Model\Venta\Reservation\Detail\Type::Subsidy->value, $subsidy->id);
|
||||
} catch (PDOException $exception) {
|
||||
throw new ServiceAction\Update(__CLASS__, $exception);
|
||||
}
|
||||
}*/
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
* @param DateTimeImmutable $date
|
||||
|
||||
Reference in New Issue
Block a user