Edit reservation
This commit is contained in:
@ -35,11 +35,11 @@ abstract class API extends Ideal\Service
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Define\Model $model
|
* @param Define\Model $model
|
||||||
* @param array $new_data
|
* @param array $newData
|
||||||
* @return Define\Model
|
* @return Define\Model
|
||||||
* @throws ServiceAction\Update
|
* @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
|
* @param int $id
|
||||||
|
|||||||
@ -108,7 +108,7 @@ class Reservations
|
|||||||
$output = [
|
$output = [
|
||||||
'input' => $input,
|
'input' => $input,
|
||||||
'reservation_id' => $reservation_id,
|
'reservation_id' => $reservation_id,
|
||||||
'reservations' => null,
|
'reservation' => null,
|
||||||
'success' => false,
|
'success' => false,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@ -87,6 +87,7 @@ class Reservation extends Common\Ideal\Repository
|
|||||||
$this->editUnits($model, $new_data);
|
$this->editUnits($model, $new_data);
|
||||||
$this->editPromotions($model, $new_data);
|
$this->editPromotions($model, $new_data);
|
||||||
$this->editBroker($model, $new_data);
|
$this->editBroker($model, $new_data);
|
||||||
|
$this->editPayment($model, $new_data);
|
||||||
return $model;
|
return $model;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -515,6 +516,7 @@ class Reservation extends Common\Ideal\Repository
|
|||||||
$reservation->units[$idx]['value'] = $unit['value'];
|
$reservation->units[$idx]['value'] = $unit['value'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function editBroker(Model\Venta\Reservation &$reservation, array $new_data): void
|
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) {
|
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,
|
'type' => Model\Venta\Reservation\Detail\Type::Broker->value,
|
||||||
'broker_rut' => $new_data['broker_rut']
|
'broker_rut' => $new_data['broker_rut']
|
||||||
]);
|
]);
|
||||||
$reservation->broker = $this->brokerService->fetchById($new_data['broker_rut']);
|
$reservation->broker = $this->brokerService->get($new_data['broker_rut']);
|
||||||
} catch (PDOException) {}
|
} catch (PDOException|Read) {}
|
||||||
}
|
}
|
||||||
protected function editPromotions(Model\Venta\Reservation &$reservation, array $new_data): void
|
protected function editPromotions(Model\Venta\Reservation &$reservation, array $new_data): void
|
||||||
{
|
{
|
||||||
|
|||||||
@ -4,6 +4,7 @@ namespace Incoviba\Service\Venta;
|
|||||||
use DateMalformedStringException;
|
use DateMalformedStringException;
|
||||||
use Exception;
|
use Exception;
|
||||||
use DateTimeImmutable;
|
use DateTimeImmutable;
|
||||||
|
use Incoviba\Exception\ServiceAction\Update;
|
||||||
use PDOException;
|
use PDOException;
|
||||||
use Psr\Log\LoggerInterface;
|
use Psr\Log\LoggerInterface;
|
||||||
use Incoviba\Common\Ideal;
|
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
|
public function edit(Model\Venta\Credito $credito, array $data): Model\Venta\Credito
|
||||||
{
|
{
|
||||||
$uf = $this->moneyService->getUF($credito->pago->fecha);
|
$uf = $this->moneyService->getUF($credito->pago->fecha);
|
||||||
if (array_key_exists('fecha', $data)) {
|
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');
|
$data['fecha'] = $fecha->format('Y-m-d');
|
||||||
$uf = $this->moneyService->getUF($fecha);
|
$uf = $this->moneyService->getUF($fecha);
|
||||||
$data['uf'] = $uf;
|
$data['uf'] = $uf;
|
||||||
@ -112,6 +120,10 @@ class Credito extends Ideal\Service
|
|||||||
}
|
}
|
||||||
$credito->pago = $this->pagoService->edit($credito->pago, $filteredDataPago);
|
$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 Repository\Venta\Reservation\State $stateRepository,
|
||||||
protected Service\Persona $personaService,
|
protected Service\Persona $personaService,
|
||||||
protected Service\Proyecto\Broker $brokerService,
|
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);
|
parent::__construct($logger);
|
||||||
}
|
}
|
||||||
@ -131,13 +133,16 @@ class Reservation extends Ideal\Service\API
|
|||||||
return $this->createNewReservation($data, $date);
|
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 {
|
try {
|
||||||
return $this->process($this->reservationRepository->edit($model, $new_data));
|
$reservation = $this->reservationRepository->edit($model, $newData);
|
||||||
} catch (PDOException | Implement\Exception\EmptyResult $exception) {
|
} catch (PDOException | Implement\Exception\EmptyResult $exception) {
|
||||||
throw new ServiceAction\Update(__CLASS__, $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
|
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 Model\Venta\Reservation $reservation
|
||||||
* @param array $data
|
* @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 Model\Venta\Reservation $reservation
|
||||||
* @param array $data
|
* @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 Model\Venta\Reservation $reservation
|
||||||
* @param array $data
|
* @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 array $data
|
||||||
* @param DateTimeImmutable $date
|
* @param DateTimeImmutable $date
|
||||||
|
|||||||
Reference in New Issue
Block a user