Promociones para cada subdivicion
This commit is contained in:
@ -163,10 +163,10 @@ class Contracts
|
||||
try {
|
||||
$unit = $unitRepository->fetchById($unit_id);
|
||||
$contractService->getById($contract_id);
|
||||
$promotion = $promotionRepository->fetchByContractAndUnit($contract_id, $unit->id);
|
||||
$promotions = $promotionRepository->fetchByContractAndUnit($contract_id, $unit->id);
|
||||
$output['unidades'] []= [
|
||||
'id' => $unit->id,
|
||||
'promotion' => $promotion
|
||||
'promotions' => $promotions
|
||||
];
|
||||
} catch (ServiceAction\Read | Implement\Exception\EmptyResult) {}
|
||||
}
|
||||
|
@ -127,14 +127,14 @@ class Promotions
|
||||
}
|
||||
}
|
||||
}
|
||||
if (count($input['operator']) > 0 and $input['operator'][0] !== '') {
|
||||
$contract_ids = array_filter($input['operator'], function($operator_id) { return $operator_id !== ''; });
|
||||
$total += count($contract_ids);
|
||||
foreach ($contract_ids as $contract_id) {
|
||||
if (count($input['broker']) > 0 and $input['broker'][0] !== '') {
|
||||
$broker_ruts = array_filter($input['broker'], function($broker_rut) { return $broker_rut !== ''; });
|
||||
$total += count($broker_ruts);
|
||||
foreach ($broker_ruts as $broker_rut) {
|
||||
try {
|
||||
$promotionService->addContract($promotion_id, $contract_id);
|
||||
$promotionService->addBroker($promotion_id, $broker_rut);
|
||||
$output['connections'] []= [
|
||||
'operator_id' => $contract_id,
|
||||
'broker_rut' => $broker_rut,
|
||||
'success' => true,
|
||||
];
|
||||
$output['partial'] = true;
|
||||
@ -205,11 +205,79 @@ class Promotions
|
||||
$output = [
|
||||
'promotion_id' => $promotion_id,
|
||||
'project_id' => $project_id,
|
||||
'connection' => null,
|
||||
'success' => false,
|
||||
];
|
||||
try {
|
||||
$output['connection'] = $promotionService->removeProject($promotion_id, $project_id);
|
||||
$promotionService->removeProject($promotion_id, $project_id);
|
||||
$output['success'] = true;
|
||||
} catch (ServiceAction\Delete $exception) {
|
||||
return $this->withError($response, $exception);
|
||||
}
|
||||
return $this->withJson($response, $output);
|
||||
}
|
||||
public function removeBroker(ServerRequestInterface $request, ResponseInterface $response,
|
||||
Service\Venta\Promotion $promotionService,
|
||||
int $promotion_id, string $broker_rut): ResponseInterface
|
||||
{
|
||||
$output = [
|
||||
'promotion_id' => $promotion_id,
|
||||
'broker_rut' => $broker_rut,
|
||||
'success' => false,
|
||||
];
|
||||
try {
|
||||
$promotionService->removeBroker($promotion_id, $broker_rut);
|
||||
$output['success'] = true;
|
||||
} catch (ServiceAction\Delete $exception) {
|
||||
return $this->withError($response, $exception);
|
||||
}
|
||||
return $this->withJson($response, $output);
|
||||
}
|
||||
public function removeUnitType(ServerRequestInterface $request, ResponseInterface $response,
|
||||
Service\Venta\Promotion $promotionService,
|
||||
int $promotion_id, int $project_id, int $unit_type_id): ResponseInterface
|
||||
{
|
||||
$output = [
|
||||
'promotion_id' => $promotion_id,
|
||||
'project_id' => $project_id,
|
||||
'unit_type_id' => $unit_type_id,
|
||||
'success' => false,
|
||||
];
|
||||
try {
|
||||
$promotionService->removeUnitType($promotion_id, $project_id, $unit_type_id);
|
||||
$output['success'] = true;
|
||||
} catch (ServiceAction\Delete $exception) {
|
||||
return $this->withError($response, $exception);
|
||||
}
|
||||
return $this->withJson($response, $output);
|
||||
}
|
||||
public function removeUnitLine(ServerRequestInterface $request, ResponseInterface $response,
|
||||
Service\Venta\Promotion $promotionService,
|
||||
int $promotion_id, int $unit_line_id): ResponseInterface
|
||||
{
|
||||
$output = [
|
||||
'promotion_id' => $promotion_id,
|
||||
'unit_line_id' => $unit_line_id,
|
||||
'success' => false,
|
||||
];
|
||||
try {
|
||||
$promotionService->removeUnitLine($promotion_id, $unit_line_id);
|
||||
$output['success'] = true;
|
||||
} catch (ServiceAction\Delete $exception) {
|
||||
return $this->withError($response, $exception);
|
||||
}
|
||||
return $this->withJson($response, $output);
|
||||
}
|
||||
public function removeUnit(ServerRequestInterface $request, ResponseInterface $response,
|
||||
Service\Venta\Promotion $promotionService,
|
||||
int $promotion_id, int $unit_id): ResponseInterface
|
||||
{
|
||||
$output = [
|
||||
'promotion_id' => $promotion_id,
|
||||
'unit_id' => $unit_id,
|
||||
'success' => false,
|
||||
];
|
||||
try {
|
||||
$promotionService->removeUnit($promotion_id, $unit_id);
|
||||
$output['success'] = true;
|
||||
} catch (ServiceAction\Delete $exception) {
|
||||
return $this->withError($response, $exception);
|
||||
|
@ -19,7 +19,7 @@ class Promotions extends Ideal\Controller
|
||||
}
|
||||
public function show(ServerRequestInterface $request, ResponseInterface $response, View $view,
|
||||
Service\Venta\Promotion $promotionService, Service\Proyecto $proyectoService,
|
||||
Service\Proyecto\Broker $brokerService, Service\Proyecto\Broker\Contract $contractService,
|
||||
Service\Proyecto\Broker $brokerService,
|
||||
int $promotion_id): ResponseInterface
|
||||
{
|
||||
$promotion = null;
|
||||
@ -27,9 +27,8 @@ class Promotions extends Ideal\Controller
|
||||
$promotion = $promotionService->getById($promotion_id);
|
||||
} catch (ServiceAction\Read) {}
|
||||
$projects = $proyectoService->getVendibles('descripcion');
|
||||
$contracts = $contractService->getAll();
|
||||
$brokers = $brokerService->getAll('name');
|
||||
return $view->render($response, 'ventas.promotions.show', ['promotion' => $promotion,
|
||||
'projects' => $projects, 'contracts' => $contracts, 'brokers' => $brokers]);
|
||||
'projects' => $projects, 'brokers' => $brokers]);
|
||||
}
|
||||
}
|
||||
|
@ -26,13 +26,13 @@ class Promotion extends Common\Ideal\Model
|
||||
return $this->projects;
|
||||
}
|
||||
|
||||
protected array $contracts;
|
||||
public function contracts(): array
|
||||
protected array $brokers;
|
||||
public function brokers(): array
|
||||
{
|
||||
if (empty($this->contracts)) {
|
||||
$this->contracts = $this->runFactory('contracts') ?? [];
|
||||
if (empty($this->brokers)) {
|
||||
$this->brokers = $this->runFactory('brokers') ?? [];
|
||||
}
|
||||
return $this->contracts;
|
||||
return $this->brokers;
|
||||
}
|
||||
|
||||
protected array $unitTypes;
|
||||
@ -61,15 +61,6 @@ class Promotion extends Common\Ideal\Model
|
||||
return $this->units;
|
||||
}
|
||||
|
||||
protected array $contractUnits;
|
||||
public function contractUnits(): array
|
||||
{
|
||||
if (empty($this->contractUnits)) {
|
||||
$this->contractUnits = $this->runFactory('contractUnits');
|
||||
}
|
||||
return $this->contractUnits;
|
||||
}
|
||||
|
||||
public function value(float $price): float
|
||||
{
|
||||
if ($this->type === Type::FIXED) {
|
||||
@ -89,7 +80,7 @@ class Promotion extends Common\Ideal\Model
|
||||
'type' => $this->type,
|
||||
'state' => $this->state,
|
||||
'projects' => $this->projects() ?? [],
|
||||
'contracts' => $this->contracts() ?? [],
|
||||
'contracts' => $this->brokers() ?? [],
|
||||
'units' => $this->units() ?? []
|
||||
];
|
||||
}
|
||||
|
@ -179,14 +179,8 @@ class Proyecto extends Ideal\Repository
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->select('a.*')
|
||||
->from("{$this->getTable()} a")
|
||||
->joined('LEFT OUTER JOIN proyecto_tipo_unidad ptu ON ptu.proyecto = a.id')
|
||||
->joined('LEFT OUTER JOIN unidad ON unidad.pt = ptu.id')
|
||||
->joined('LEFT OUTER JOIN promotion_units pu ON pu.unit_id = unidad.id')
|
||||
->joined('LEFT OUTER JOIN broker_contracts bc ON bc.project_id = a.id')
|
||||
->joined('LEFT OUTER JOIN promotion_contracts pc ON pc.contract_id = bc.id')
|
||||
->where('pu.promotion_id = :promotion_id OR pc.promotion_id = :promotion_id')
|
||||
->group('a.id');
|
||||
trigger_error($query . ' ' . json_encode(['promotion_id' => $promotion_id]));
|
||||
->joined('INNER JOIN promotion_projects pp ON pp.project_id = a.id')
|
||||
->where('pp.promotion_id = :promotion_id');
|
||||
return $this->fetchMany($query, ['promotion_id' => $promotion_id]);
|
||||
}
|
||||
/*public function fetchSuperficieVendido(int $proyecto_id): float
|
||||
|
@ -60,4 +60,19 @@ class Broker extends Common\Ideal\Repository
|
||||
->where('name = :name');
|
||||
return $this->fetchOne($query, ['name' => $name]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $promotion_id
|
||||
* @return array
|
||||
* @throws Common\Implement\Exception\EmptyResult
|
||||
*/
|
||||
public function fetchByPromotion(int $promotion_id): array
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->select('a.*')
|
||||
->from("{$this->getTable()} a")
|
||||
->joined('INNER JOIN promotion_brokers pb ON pb.broker_rut = a.rut')
|
||||
->where('pb.promotion_id = :promotion_id');
|
||||
return $this->fetchMany($query, ['promotion_id' => $promotion_id]);
|
||||
}
|
||||
}
|
||||
|
@ -128,21 +128,6 @@ class Contract extends Common\Ideal\Repository
|
||||
return $this->fetchOne($query, ['project_id' => $projectId, 'broker_rut' => $brokerRut, 'state' => Model\Proyecto\Broker\Contract\State\Type::ACTIVE->value]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $promotion_id
|
||||
* @return array
|
||||
* @throws Common\Implement\Exception\EmptyResult
|
||||
*/
|
||||
public function fetchByPromotion(int $promotion_id): array
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->select('a.*')
|
||||
->from("{$this->getTable()} a")
|
||||
->joined('INNER JOIN promotion_contracts pc ON pc.contract_id = a.id')
|
||||
->where('pc.promotion_id = :promotion_id');
|
||||
return $this->fetchMany($query, ['promotion_id' => $promotion_id]);
|
||||
}
|
||||
|
||||
protected function statusJoin(): string
|
||||
{
|
||||
return 'INNER JOIN (SELECT bcs1.* FROM broker_contract_states bcs1 INNER JOIN (SELECT MAX(id) AS id, contract_id FROM broker_contract_states GROUP BY contract_id) bcs0 ON bcs0.id = bcs1.id) bcs ON bcs.contract_id = a.id';
|
||||
|
@ -54,9 +54,8 @@ class ProyectoTipoUnidad extends Ideal\Repository
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->select('a.*')
|
||||
->from("{$this->getTable()} a")
|
||||
->joined('INNER JOIN unidad ON unidad.`pt` = a.`id`')
|
||||
->joined('INNER JOIN `promotion_units` pu ON pu.`unit_id` = unidad.`id`')
|
||||
->where('pu.`promotion_id` = :promotion_id')
|
||||
->joined('INNER JOIN promotion_unit_lines pul ON pul.unit_line_id = a.id')
|
||||
->where('pul.`promotion_id` = :promotion_id')
|
||||
->group('a.id');
|
||||
return $this->fetchMany($query, ['promotion_id' => $promotion_id]);
|
||||
}
|
||||
|
@ -59,12 +59,10 @@ class TipoUnidad extends Ideal\Repository
|
||||
public function fetchByPromotion(int $promotion_id): array
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->select('a.id, ptu.proyecto AS project_id')
|
||||
->select('a.id, put.project_id')
|
||||
->from("{$this->getTable()} a")
|
||||
->joined('INNER JOIN proyecto_tipo_unidad ptu ON ptu.`tipo` = a.`id`')
|
||||
->joined('INNER JOIN unidad ON unidad.`pt` = ptu.`id`')
|
||||
->joined('INNER JOIN `promotion_units` pu ON pu.`unit_id` = unidad.`id`')
|
||||
->where('pu.`promotion_id` = :promotion_id')
|
||||
->joined('INNER JOIN promotion_unit_types put ON put.`unit_type_id` = a.`id`')
|
||||
->where('put.`promotion_id` = :promotion_id')
|
||||
->group('a.id');
|
||||
try {
|
||||
$result = $this->connection->execute($query, ['promotion_id' => $promotion_id])->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
@ -75,10 +75,23 @@ class Promotion extends Common\Ideal\Repository
|
||||
public function fetchByContract(int $contract_id): array
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->select('a.*')
|
||||
->select('DISTINCT a.*')
|
||||
->from("{$this->getTable()} a")
|
||||
->joined('INNER JOIN promotion_contracts pc ON pc.promotion_id = a.id')
|
||||
->where('pc.contract_id = :contract_id');
|
||||
->joined('LEFT OUTER JOIN promotion_broker pb ON pb.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN broker_contracts bc ON bc.id = pb.contract_id')
|
||||
->joined('LEFT OUTER JOIN promotion_projects pp ON pp.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN broker_contracts bc2 ON bc2.project_id = pp.project_id')
|
||||
->joined('LEFT OUTER JOIN promotion_unit_types put ON put.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN broker_contracts bc3 ON bc3.project_id = put.project_id')
|
||||
->joined('LEFT OUTER JOIN promotion_unit_lines pul ON pul.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN proyecto_tipo_unidad ptu ON ptu.id = pul.unit_line_id')
|
||||
->joined('LEFT OUTER JOIN broker_contracts bc4 ON bc4.project_id = btu.proyecto')
|
||||
->joined('LEFT OUTER JOIN promotion_units pu ON pu.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN unidad ON unidad.id = pu.unit_id')
|
||||
->joined('LEFT OUTER JOIN proyecto_tipo_unidad ptu2 ON ptu2.id = unidad.pt')
|
||||
->joined('LEFT OUTER JOIN broker_contracts bc5 ON bc5.project_id = ptu2.proyecto')
|
||||
->where('bc.id = :contract_id OR bc2.id = :contract_id OR bc3.id = :contract_id OR bc4.id = :contract_id OR bc5.id = :contract_id')
|
||||
->group('a.id');
|
||||
return $this->fetchMany($query, ['contract_id' => $contract_id]);
|
||||
}
|
||||
|
||||
@ -90,10 +103,23 @@ class Promotion extends Common\Ideal\Repository
|
||||
public function fetchActiveByContract(int $contract_id): array
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->select('a.*')
|
||||
->select('DISTINCT a.*')
|
||||
->from("{$this->getTable()} a")
|
||||
->joined('INNER JOIN promotion_contracts pc ON pc.promotion_id = a.id')
|
||||
->where('pc.contract_id = :contract_id AND a.state = :state');
|
||||
->joined('LEFT OUTER JOIN promotion_broker pb ON pb.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN broker_contracts bc ON bc.id = pb.contract_id')
|
||||
->joined('LEFT OUTER JOIN promotion_projects pp ON pp.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN broker_contracts bc2 ON bc2.project_id = pp.project_id')
|
||||
->joined('LEFT OUTER JOIN promotion_unit_types put ON put.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN broker_contracts bc3 ON bc3.project_id = put.project_id')
|
||||
->joined('LEFT OUTER JOIN promotion_unit_lines pul ON pul.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN proyecto_tipo_unidad ptu ON ptu.id = pul.unit_line_id')
|
||||
->joined('LEFT OUTER JOIN broker_contracts bc4 ON bc4.project_id = btu.proyecto')
|
||||
->joined('LEFT OUTER JOIN promotion_units pu ON pu.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN unidad ON unidad.id = pu.unit_id')
|
||||
->joined('LEFT OUTER JOIN proyecto_tipo_unidad ptu2 ON ptu2.id = unidad.pt')
|
||||
->joined('LEFT OUTER JOIN broker_contracts bc5 ON bc5.project_id = ptu2.proyecto')
|
||||
->where('(bc.id = :contract_id OR bc2.id = :contract_id OR bc3.id = :contract_id OR bc4.id = :contract_id OR bc5.id = :contract_id) AND a.state = :state')
|
||||
->group('a.id');
|
||||
return $this->fetchMany($query, ['contract_id' => $contract_id, 'state' => Model\Venta\Promotion\State::ACTIVE]);
|
||||
}
|
||||
|
||||
@ -105,10 +131,19 @@ class Promotion extends Common\Ideal\Repository
|
||||
public function fetchByUnit(int $unit_id): array
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->select('a.*')
|
||||
->select('DISTINCT a.*')
|
||||
->from("{$this->getTable()} a")
|
||||
->joined('INNER JOIN promotion_units pu ON pu.promotion_id = a.id')
|
||||
->where('pu.unit_id = :unit_id');
|
||||
->joined('LEFT OUTER JOIN promotion_units pu ON pu.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN promotion_projects pp ON pp.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN proyecto_tipo_unidad ptu1 ON ptu1.proyecto = pp.project_id')
|
||||
->joined('LEFT OUTER JOIN unidad u1 ON u1.pt = ptu1.id')
|
||||
->joined('LEFT OUTER JOIN promotion_unit_types put ON put.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN proyecto_tipo_unidad ptu2 ON ptu2.tipo = put.unit_type_id AND ptu2.proyecto = put.project_id')
|
||||
->joined('LEFT OUTER JOIN unidad u2 ON u2.pt = ptu2.id')
|
||||
->joined('LEFT OUTER JOIN promotion_unit_lines pul ON pul.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN unidad u3 ON u3.pt = pul.unit_line_id')
|
||||
->where('pu.unit_id = :unit_id OR u1.id = :unit_id OR u2.id = :unit_id OR u3.id = :unit_id')
|
||||
->group('a.id');
|
||||
return $this->fetchMany($query, ['unit_id' => $unit_id]);
|
||||
}
|
||||
|
||||
@ -120,10 +155,19 @@ class Promotion extends Common\Ideal\Repository
|
||||
public function fetchActiveByUnit(int $unit_id): array
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->select('a.*')
|
||||
->select('DISTINCT a.*')
|
||||
->from("{$this->getTable()} a")
|
||||
->joined('INNER JOIN promotion_units pu ON pu.promotion_id = a.id')
|
||||
->where('pu.unit_id = :unit_id AND a.state = :state');
|
||||
->joined('LEFT OUTER JOIN promotion_units pu ON pu.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN promotion_projects pp ON pp.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN proyecto_tipo_unidad ptu1 ON ptu1.proyecto = pp.project_id')
|
||||
->joined('LEFT OUTER JOIN unidad u1 ON u1.pt = ptu1.id')
|
||||
->joined('LEFT OUTER JOIN promotion_unit_types put ON put.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN proyecto_tipo_unidad ptu2 ON ptu2.tipo = put.unit_type_id AND ptu2.proyecto = put.project_id')
|
||||
->joined('LEFT OUTER JOIN unidad u2 ON u2.pt = ptu2.id')
|
||||
->joined('LEFT OUTER JOIN promotion_unit_lines pul ON pul.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN unidad u3 ON u3.pt = pul.unit_line_id')
|
||||
->where('(pu.unit_id = :unit_id OR u1.id = :unit_id OR u2.id = :unit_id OR u3.id = :unit_id) AND a.state = :state')
|
||||
->group('a.id');
|
||||
return $this->fetchMany($query, ['unit_id' => $unit_id, 'state' => Model\Venta\Promotion\State::ACTIVE]);
|
||||
}
|
||||
|
||||
@ -135,13 +179,17 @@ class Promotion extends Common\Ideal\Repository
|
||||
public function fetchByProject(int $project_id): array
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->select('a.*')
|
||||
->select('DISTINCT a.*')
|
||||
->from("{$this->getTable()} a")
|
||||
->joined('INNER JOIN promotion_units pu ON pu.promotion_id = a.id')
|
||||
->joined('INNER JOIN unidad ON unidad.id = pu.unit_id')
|
||||
->joined('INNER JOIN proyecto_tipo_unidad ON proyecto_tipo_unidad.id = unidad.pt')
|
||||
->joined('INNER JOIN proyecto ON proyecto.id = proyecto_tipo_unidad.proyecto')
|
||||
->where('proyecto.id = :project_id');
|
||||
->joined('LEFT OUTER JOIN promotion_projects pp ON pp.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN promotion_unit_types put ON put.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN promotion_unit_lines pul ON pul.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN proyecto_tipo_unidad ptu ON ptu.id = pul.unit_line_id')
|
||||
->joined('LEFT OUTER JOIN promotion_units pu ON pu.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN unidad ON unidad.id = pu.unit_id')
|
||||
->joined('LEFT OUTER JOIN proyecto_tipo_unidad ptu1 ON ptu.id = unidad.pt')
|
||||
->where('pp.project_id = :project_id OR put.project_id = :project_id OR ptu.proyecto = :project_id OR ptu1.proyecto = :project_id')
|
||||
->group('a.id');
|
||||
return $this->fetchMany($query, ['project_id' => $project_id]);
|
||||
}
|
||||
|
||||
@ -153,56 +201,43 @@ class Promotion extends Common\Ideal\Repository
|
||||
public function fetchActiveByProject(int $project_id): array
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->select('a.*')
|
||||
->select('DISTINCT a.*')
|
||||
->from("{$this->getTable()} a")
|
||||
->joined('INNER JOIN promotion_units pu ON pu.promotion_id = a.id')
|
||||
->joined('INNER JOIN unidad ON unidad.id = pu.unit_id')
|
||||
->joined('INNER JOIN proyecto_tipo_unidad ON proyecto_tipo_unidad.id = unidad.pt')
|
||||
->joined('INNER JOIN proyecto ON proyecto.id = proyecto_tipo_unidad.proyecto')
|
||||
->where('proyecto.id = :project_id AND a.state = :state');
|
||||
->joined('LEFT OUTER JOIN promotion_projects pp ON pp.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN promotion_unit_types put ON put.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN promotion_unit_lines pul ON pul.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN proyecto_tipo_unidad ptu ON ptu.id = pul.unit_line_id')
|
||||
->joined('LEFT OUTER JOIN promotion_units pu ON pu.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN unidad ON unidad.id = pu.unit_id')
|
||||
->joined('LEFT OUTER JOIN proyecto_tipo_unidad ptu1 ON ptu.id = unidad.pt')
|
||||
->where('(pp.project_id = :project_id OR put.project_id = :project_id OR ptu.proyecto = :project_id OR ptu1.proyecto = :project_id) AND a.state = :state')
|
||||
->group('a.id');
|
||||
return $this->fetchMany($query, ['project_id' => $project_id, 'state' => Model\Venta\Promotion\State::ACTIVE]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $contract_id
|
||||
* @param int $unit_id
|
||||
* @return Model\Venta\Promotion
|
||||
* @throws Common\Implement\Exception\EmptyResult
|
||||
*/
|
||||
public function fetchByContractAndUnit(int $contract_id, int $unit_id): Model\Venta\Promotion
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->select('a.*')
|
||||
->from("{$this->getTable()} a")
|
||||
->joined('INNER JOIN promotion_contracts pc ON pc.promotion_id = a.id')
|
||||
->joined('INNER JOIN promotion_units pu ON pu.promotion_id = a.id')
|
||||
->where('pc.contract_id = :contract_id AND pu.unit_id = :unit_id');
|
||||
return $this->fetchOne($query, ['contract_id' => $contract_id, 'unit_id' => $unit_id]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $promotion_id
|
||||
* @return array
|
||||
* @throws Common\Implement\Exception\EmptyResult
|
||||
*/
|
||||
public function fetchContractUnitsByPromotion(int $promotion_id): array
|
||||
public function fetchByContractAndUnit(int $contract_id, int $unit_id): array
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->select('contracts.id, unidad.id')
|
||||
->select('DISTINCT a.*')
|
||||
->from("{$this->getTable()} a")
|
||||
->joined('INNER JOIN promotion_contract_units pcu ON pcu.promotion_id = a.id')
|
||||
->joined('INNER JOIN unidad ON unidad.id = pcu.unit_id')
|
||||
->joined('INNER JOIN contracts ON contracts.id = pcu.contract_id')
|
||||
->where('a.id = :promotion_id');
|
||||
try {
|
||||
$result = $this->connection->execute($query, ['promotion_id' => $promotion_id])->fetchAll(PDO::FETCH_ASSOC);
|
||||
if (empty($result)) {
|
||||
throw new Common\Implement\Exception\EmptyResult($query);
|
||||
}
|
||||
return $result;
|
||||
} catch (PDOException $exception) {
|
||||
throw new Common\Implement\Exception\EmptyResult($query, $exception);
|
||||
}
|
||||
->joined('LEFT OUTER JOIN promotion_brokers pb ON pb.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN broker_contracts bc ON bc.broker_rut = pb.broker_rut')
|
||||
->joined('LEFT OUTER JOIN promotion_units pu ON pu.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN promotion_projects pp ON pp.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN proyecto_tipo_unidad ptu1 ON ptu1.proyecto = pp.project_id')
|
||||
->joined('LEFT OUTER JOIN promotion_unit_types put ON put.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN proyecto_tipo_unidad ptu2 ON ptu2.tipo = put.unit_type_id AND ptu2.proyecto = put.project_id')
|
||||
->joined('LEFT OUTER JOIN promotion_unit_lines pul ON pul.promotion_id = a.id')
|
||||
->joined('LEFT OUTER JOIN proyecto_tipo_unidad ptu3 ON ptu3.id = put.unit_line_id')
|
||||
->where('bc.contract_id = :contract_id OR pu.unit_id = :unit_id OR ptu1.unidad = :unit_id OR ptu2.unidad = :unit_id OR ptu3.unidad = :unit_id')
|
||||
->group('a.id');
|
||||
return $this->fetchMany($query, ['contract_id' => $contract_id, 'unit_id' => $unit_id]);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -220,22 +255,93 @@ class Promotion extends Common\Ideal\Repository
|
||||
->values([':promotion_id', ':project_id']);
|
||||
$this->connection->execute($query, ['promotion_id' => $promotion->id, 'project_id' => $project_id]);
|
||||
}
|
||||
public function removeProjectForPromotion(Model\Venta\Promotion $promotion, int $project_id): void
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->delete()
|
||||
->from('promotion_projects')
|
||||
->where('promotion_id = :promotion_id AND project_id = :project_id');
|
||||
$this->connection->execute($query, ['promotion_id' => $promotion->id, 'project_id' => $project_id]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Model\Venta\Promotion $promotion
|
||||
* @param int $contract_id
|
||||
* @param int $broker_rut
|
||||
* @return void
|
||||
* @throws PDOException
|
||||
*/
|
||||
public function insertContractForPromotion(Model\Venta\Promotion $promotion, int $contract_id): void
|
||||
public function insertBrokerForPromotion(Model\Venta\Promotion $promotion, int $broker_rut): void
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->insert()
|
||||
->into('promotion_contracts')
|
||||
->columns(['promotion_id', 'contract_id'])
|
||||
->values([':promotion_id', ':contract_id']);
|
||||
$this->connection->execute($query, ['promotion_id' => $promotion->id, 'contract_id' => $contract_id]);
|
||||
->into('promotion_brokers')
|
||||
->columns(['promotion_id', 'broker_rut'])
|
||||
->values([':promotion_id', ':broker_rut']);
|
||||
$this->connection->execute($query, ['promotion_id' => $promotion->id, 'broker_rut' => $broker_rut]);
|
||||
}
|
||||
public function removeBrokerForPromotion(Model\Venta\Promotion $promotion, int $broker_rut): void
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->delete()
|
||||
->from('promotion_brokers')
|
||||
->where('promotion_id = :promotion_id AND broker_rut = :broker_rut');
|
||||
$this->connection->execute($query, ['promotion_id' => $promotion->id, 'broker_rut' => $broker_rut]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Model\Venta\Promotion $promotion
|
||||
* @param int $project_id
|
||||
* @param int $unit_type_id
|
||||
* @return void
|
||||
*/
|
||||
public function insertUnitTypeForPromotion(Model\Venta\Promotion $promotion, int $project_id, int $unit_type_id): void
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->insert()
|
||||
->into('promotion_unit_types')
|
||||
->columns(['promotion_id', 'project_id', 'unit_type_id'])
|
||||
->values([':promotion_id', ':project_id', ':unit_type_id']);
|
||||
$this->connection->execute($query,
|
||||
['promotion_id' => $promotion->id, 'project_id' => $project_id, 'unit_type_id' => $unit_type_id]);
|
||||
}
|
||||
public function removeUnitTypeForPromotion(Model\Venta\Promotion $promotion, int $project_id, int $unit_type_id): void
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->delete()
|
||||
->from('promotion_unit_types')
|
||||
->where('promotion_id = :promotion_id AND project_id = :project_id AND unit_type_id = :unit_type_id');
|
||||
$this->connection->execute($query,
|
||||
['promotion_id' => $promotion->id, 'project_id' => $project_id, 'unit_type_id' => $unit_type_id]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Model\Venta\Promotion $promotion
|
||||
* @param int $unit_line_id
|
||||
* @return void
|
||||
*/
|
||||
public function insertUnitLineForPromotion(Model\Venta\Promotion $promotion, int $unit_line_id): void
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->insert()
|
||||
->into('promotion_unit_lines')
|
||||
->columns(['promotion_id', 'unit_line_id'])
|
||||
->values([':promotion_id', ':unit_line_id']);
|
||||
$this->connection->execute($query, ['promotion_id' => $promotion->id, 'unit_line_id' => $unit_line_id]);
|
||||
}
|
||||
public function removeUnitLineForPromotion(Model\Venta\Promotion $promotion, int $unit_line_id): void
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->delete()
|
||||
->from('promotion_unit_lines')
|
||||
->where('promotion_id = :promotion_id AND unit_line_id = :unit_line_id');
|
||||
$this->connection->execute($query, ['promotion_id' => $promotion->id, 'unit_line_id' => $unit_line_id]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Model\Venta\Promotion $promotion
|
||||
* @param int $unit_id
|
||||
* @return void
|
||||
*/
|
||||
public function insertUnitForPromotion(Model\Venta\Promotion $promotion, int $unit_id): void
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
@ -245,4 +351,12 @@ class Promotion extends Common\Ideal\Repository
|
||||
->values([':promotion_id', ':unit_id']);
|
||||
$this->connection->execute($query, ['promotion_id' => $promotion->id, 'unit_id' => $unit_id]);
|
||||
}
|
||||
public function removeUnitForPromotion(Model\Venta\Promotion $promotion, int $unit_id): void
|
||||
{
|
||||
$query = $this->connection->getQueryBuilder()
|
||||
->delete()
|
||||
->from('promotion_units')
|
||||
->where('promotion_id = :promotion_id AND unit_id = :unit_id');
|
||||
$this->connection->execute($query, ['promotion_id' => $promotion->id, 'unit_id' => $unit_id]);
|
||||
}
|
||||
}
|
||||
|
@ -17,6 +17,7 @@ class Promotion extends Ideal\Service
|
||||
protected Repository\Venta\Promotion $promotionRepository,
|
||||
protected Repository\Proyecto $projectRepository,
|
||||
protected Repository\Proyecto\Broker\Contract $contractRepository,
|
||||
protected Repository\Proyecto\Broker $brokerRepository,
|
||||
protected Repository\Proyecto\TipoUnidad $tipoUnidadRepository,
|
||||
protected Repository\Proyecto\ProyectoTipoUnidad $proyectoTipoUnidadRepository,
|
||||
protected Repository\Venta\Unidad $unidadRepository)
|
||||
@ -56,12 +57,7 @@ class Promotion extends Ideal\Service
|
||||
try {
|
||||
return array_map([$this, 'process'], $this->promotionRepository->fetchByContract($contract_id));
|
||||
} catch (Implement\Exception\EmptyResult) {
|
||||
try {
|
||||
$contract = $this->contractRepository->fetchById($contract_id);
|
||||
return array_map([$this, 'process'], $this->promotionRepository->fetchByProject($contract->project->id));
|
||||
} catch (Implement\Exception\EmptyResult) {
|
||||
return [];
|
||||
}
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
@ -74,12 +70,7 @@ class Promotion extends Ideal\Service
|
||||
try {
|
||||
return array_map([$this, 'process'], $this->promotionRepository->fetchActiveByContract($contract_id));
|
||||
} catch (Implement\Exception\EmptyResult) {
|
||||
try {
|
||||
$contract = $this->contractRepository->fetchById($contract_id);
|
||||
return array_map([$this, 'process'], $this->promotionRepository->fetchActiveByProject($contract->project->id));
|
||||
} catch (Implement\Exception\EmptyResult) {
|
||||
return [];
|
||||
}
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
@ -92,11 +83,8 @@ class Promotion extends Ideal\Service
|
||||
{
|
||||
try {
|
||||
$filteredData = $this->promotionRepository->filterData($data);
|
||||
#throw new \Exception(var_export($filteredData, true));
|
||||
$promotion = $this->promotionRepository->create($filteredData);
|
||||
#throw new \Exception(var_export($promotion, true));
|
||||
$promotion = $this->promotionRepository->save($promotion);
|
||||
return $this->process($promotion);
|
||||
return $this->process($this->promotionRepository->save($promotion));
|
||||
} catch (PDOException $exception) {
|
||||
throw new Exception\ServiceAction\Create(__CLASS__, $exception);
|
||||
}
|
||||
@ -166,11 +154,11 @@ class Promotion extends Ideal\Service
|
||||
|
||||
/**
|
||||
* @param int $promotion_id
|
||||
* @param int $contract_id
|
||||
* @param int $broker_rut
|
||||
* @return Model\Venta\Promotion
|
||||
* @throws Exception\ServiceAction\Create
|
||||
*/
|
||||
public function addContract(int $promotion_id, int $contract_id): Model\Venta\Promotion
|
||||
public function addBroker(int $promotion_id, int $broker_rut): Model\Venta\Promotion
|
||||
{
|
||||
try {
|
||||
$promotion = $this->promotionRepository->fetchById($promotion_id);
|
||||
@ -178,15 +166,15 @@ class Promotion extends Ideal\Service
|
||||
throw new Exception\ServiceAction\Create(__CLASS__, $exception);
|
||||
}
|
||||
try {
|
||||
$contract = $this->contractRepository->fetchById($contract_id);
|
||||
$broker = $this->brokerRepository->fetchById($broker_rut);
|
||||
} catch (Implement\Exception\EmptyResult $exception) {
|
||||
throw new Exception\ServiceAction\Create(__CLASS__, $exception);
|
||||
}
|
||||
if (in_array($contract, $promotion->contracts())) {
|
||||
if (in_array($broker, $promotion->brokers())) {
|
||||
return $this->process($promotion);
|
||||
}
|
||||
try {
|
||||
$this->promotionRepository->insertContractForPromotion($promotion, $contract->id);
|
||||
$this->promotionRepository->insertBrokerForPromotion($promotion, $broker->rut);
|
||||
return $this->process($promotion);
|
||||
} catch (PDOException $exception) {
|
||||
throw new Exception\ServiceAction\Create(__CLASS__, $exception);
|
||||
@ -221,11 +209,11 @@ class Promotion extends Ideal\Service
|
||||
return $this->process($promotion);
|
||||
}
|
||||
try {
|
||||
$units = $this->unidadRepository->fetchByProyectoAndTipo($project->id, $unitType->id);
|
||||
} catch (Implement\Exception\EmptyResult $exception) {
|
||||
$this->promotionRepository->insertUnitTypeForPromotion($promotion, $project->id, $unitType->id);
|
||||
return $this->process($promotion);
|
||||
} catch (PDOException $exception) {
|
||||
throw new Exception\ServiceAction\Create(__CLASS__, $exception);
|
||||
}
|
||||
return $this->insertUnits($promotion, $units);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -250,11 +238,11 @@ class Promotion extends Ideal\Service
|
||||
return $this->process($promotion);
|
||||
}
|
||||
try {
|
||||
$units = $this->unidadRepository->fetchByProyectoTipoUnidad($unitLine->id);
|
||||
} catch (Implement\Exception\EmptyResult $exception) {
|
||||
$this->promotionRepository->insertUnitLineForPromotion($promotion, $unitLine->id);
|
||||
return $this->process($promotion);
|
||||
} catch (PDOException $exception) {
|
||||
throw new Exception\ServiceAction\Create(__CLASS__, $exception);
|
||||
}
|
||||
return $this->insertUnits($promotion, $units);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -286,7 +274,13 @@ class Promotion extends Ideal\Service
|
||||
}
|
||||
}
|
||||
|
||||
public function removeProject(int $promotion_id, int $project_id): array
|
||||
/**
|
||||
* @param int $promotion_id
|
||||
* @param int $project_id
|
||||
* @return void
|
||||
* @throws Exception\ServiceAction\Delete
|
||||
*/
|
||||
public function removeProject(int $promotion_id, int $project_id): void
|
||||
{
|
||||
try {
|
||||
$promotion = $this->promotionRepository->fetchById($promotion_id);
|
||||
@ -300,39 +294,115 @@ class Promotion extends Ideal\Service
|
||||
}
|
||||
try {
|
||||
$this->promotionRepository->removeProjectForPromotion($promotion, $project->id);
|
||||
return [
|
||||
'id' => '',
|
||||
'promotion_id' => $promotion_id,
|
||||
'project_id' => $project_id,
|
||||
|
||||
];
|
||||
} catch (PDOException $exception) {
|
||||
throw new Exception\ServiceAction\Delete(__CLASS__, $exception);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Model\Venta\Promotion $promotion
|
||||
* @param array $units
|
||||
* @return Model\Venta\Promotion
|
||||
* @throws Exception\ServiceAction\Create
|
||||
* @param int $promotion_id
|
||||
* @param int $broker_rut
|
||||
* @return void
|
||||
* @throws Exception\ServiceAction\Delete
|
||||
*/
|
||||
protected function insertUnits(Model\Venta\Promotion $promotion, array $units): Model\Venta\Promotion
|
||||
public function removeBroker(int $promotion_id, int $broker_rut): void
|
||||
{
|
||||
$errors = [];
|
||||
foreach ($units as $unit) {
|
||||
try {
|
||||
$this->promotionRepository->insertUnitForPromotion($promotion, $unit->id);
|
||||
} catch (PDOException | \Throwable $exception) {
|
||||
$this->logger->debug($exception);
|
||||
$errors []= $exception;
|
||||
}
|
||||
try {
|
||||
$promotion = $this->promotionRepository->fetchById($promotion_id);
|
||||
} catch (Implement\Exception\EmptyResult $exception) {
|
||||
throw new Exception\ServiceAction\Delete(__CLASS__, $exception);
|
||||
}
|
||||
if (count($errors) > 0) {
|
||||
$exception = new Exception\AggregateException($errors);
|
||||
throw new Exception\ServiceAction\Create(__CLASS__, $exception);
|
||||
try {
|
||||
$broker = $this->brokerRepository->fetchById($broker_rut);
|
||||
} catch (Implement\Exception\EmptyResult $exception) {
|
||||
throw new Exception\ServiceAction\Delete(__CLASS__, $exception);
|
||||
}
|
||||
try {
|
||||
$this->promotionRepository->removeBrokerForPromotion($promotion, $broker->rut);
|
||||
} catch (PDOException $exception) {
|
||||
throw new Exception\ServiceAction\Delete(__CLASS__, $exception);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $promotion_id
|
||||
* @param int $project_id
|
||||
* @param int $unitType_id
|
||||
* @return void
|
||||
* @throws Exception\ServiceAction\Delete
|
||||
*/
|
||||
public function removeUnitType(int $promotion_id, int $project_id, int $unitType_id): void
|
||||
{
|
||||
try {
|
||||
$promotion = $this->promotionRepository->fetchById($promotion_id);
|
||||
} catch (Implement\Exception\EmptyResult $exception) {
|
||||
throw new Exception\ServiceAction\Delete(__CLASS__, $exception);
|
||||
}
|
||||
try {
|
||||
$project = $this->projectRepository->fetchById($project_id);
|
||||
} catch (Implement\Exception\EmptyResult $exception) {
|
||||
throw new Exception\ServiceAction\Delete(__CLASS__, $exception);
|
||||
}
|
||||
try {
|
||||
$unitType = $this->tipoUnidadRepository->fetchById($unitType_id);
|
||||
} catch (Implement\Exception\EmptyResult $exception) {
|
||||
throw new Exception\ServiceAction\Delete(__CLASS__, $exception);
|
||||
}
|
||||
try {
|
||||
$this->promotionRepository->removeUnitTypeForPromotion($promotion, $project->id, $unitType->id);
|
||||
} catch (PDOException $exception) {
|
||||
throw new Exception\ServiceAction\Delete(__CLASS__, $exception);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $promotion_id
|
||||
* @param int $unit_line_id
|
||||
* @return void
|
||||
* @throws Exception\ServiceAction\Delete
|
||||
*/
|
||||
public function removeUnitLine(int $promotion_id, int $unit_line_id): void
|
||||
{
|
||||
try {
|
||||
$promotion = $this->promotionRepository->fetchById($promotion_id);
|
||||
} catch (Implement\Exception\EmptyResult $exception) {
|
||||
throw new Exception\ServiceAction\Delete(__CLASS__, $exception);
|
||||
}
|
||||
try {
|
||||
$unitLine = $this->proyectoTipoUnidadRepository->fetchById($unit_line_id);
|
||||
} catch (Implement\Exception\EmptyResult $exception) {
|
||||
throw new Exception\ServiceAction\Delete(__CLASS__, $exception);
|
||||
}
|
||||
try {
|
||||
$this->promotionRepository->removeUnitLineForPromotion($promotion, $unitLine->id);
|
||||
} catch (PDOException $exception) {
|
||||
throw new Exception\ServiceAction\Delete(__CLASS__, $exception);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $promotion_id
|
||||
* @param int $unit_id
|
||||
* @return void
|
||||
* @throws Exception\ServiceAction\Delete
|
||||
*/
|
||||
public function removeUnit(int $promotion_id, int $unit_id): void
|
||||
{
|
||||
try {
|
||||
$promotion = $this->promotionRepository->fetchById($promotion_id);
|
||||
} catch (Implement\Exception\EmptyResult $exception) {
|
||||
throw new Exception\ServiceAction\Delete(__CLASS__, $exception);
|
||||
}
|
||||
try {
|
||||
$unit = $this->unidadRepository->fetchById($unit_id);
|
||||
} catch (Implement\Exception\EmptyResult $exception) {
|
||||
throw new Exception\ServiceAction\Delete(__CLASS__, $exception);
|
||||
}
|
||||
try {
|
||||
$this->promotionRepository->removeUnitForPromotion($promotion, $unit->id);
|
||||
} catch (PDOException $exception) {
|
||||
throw new Exception\ServiceAction\Delete(__CLASS__, $exception);
|
||||
}
|
||||
return $this->process($promotion);
|
||||
}
|
||||
|
||||
protected function process(Model\Venta\Promotion $model): Model\Venta\Promotion
|
||||
@ -346,10 +416,10 @@ class Promotion extends Ideal\Service
|
||||
}
|
||||
})
|
||||
->setArgs(['promotion_id' => $model->id]));
|
||||
$model->addFactory('contracts', (new Implement\Repository\Factory())
|
||||
$model->addFactory('brokers', (new Implement\Repository\Factory())
|
||||
->setCallable(function($promotion_id) {
|
||||
try {
|
||||
return $this->contractRepository->fetchByPromotion($promotion_id);
|
||||
return $this->brokerRepository->fetchByPromotion($promotion_id);
|
||||
} catch (Implement\Exception\EmptyResult) {
|
||||
return [];
|
||||
}
|
||||
@ -389,24 +459,6 @@ class Promotion extends Ideal\Service
|
||||
}
|
||||
})
|
||||
->setArgs(['promotion_id' => $model->id]));
|
||||
$model->addFactory('contractUnits', (new Implement\Repository\Factory())
|
||||
->setCallable(function($promotion_id) {
|
||||
try {
|
||||
$ids = $this->promotionRepository->fetchContractUnitsByPromotion($promotion_id);
|
||||
$contractUnits = [];
|
||||
foreach ($ids as $id) {
|
||||
try {
|
||||
$contract = $this->contractRepository->fetchById($id['contract_id']);
|
||||
$unidad = $this->unidadRepository->fetchById($id['unidad_id']);
|
||||
$contractUnits[]= (object) ['contract' => $contract, 'unit' => $unidad];
|
||||
} catch (Implement\Exception\EmptyResult) {}
|
||||
}
|
||||
return $contractUnits;
|
||||
} catch (Implement\Exception\EmptyResult) {
|
||||
return [];
|
||||
}
|
||||
})
|
||||
->setArgs(['promotion_id' => $model->id]));
|
||||
return $model;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user