Promociones para cada subdivicion
This commit is contained in:
@ -17,11 +17,15 @@ final class AlterPromotionsRemovePrice extends AbstractMigration
|
||||
* Remember to call "create()" or "update()" and NOT "save()" when working
|
||||
* with the Table class.
|
||||
*/
|
||||
public function change(): void
|
||||
public function up(): void
|
||||
{
|
||||
$this->table('promotions')
|
||||
->dropForeignKey('price_id')
|
||||
->removeColumn('price_id')
|
||||
->update();
|
||||
if ($this->table('promotions')->hasColumn('price_id')) {
|
||||
$this->table('promotions')
|
||||
->dropForeignKey('price_id')
|
||||
->removeColumn('price_id')
|
||||
->update();
|
||||
}
|
||||
}
|
||||
|
||||
public function down(): void {}
|
||||
}
|
||||
|
@ -17,11 +17,12 @@ final class AlterPromotionsNullDates extends AbstractMigration
|
||||
* Remember to call "create()" or "update()" and NOT "save()" when working
|
||||
* with the Table class.
|
||||
*/
|
||||
public function change(): void
|
||||
public function up(): void
|
||||
{
|
||||
$this->table('promotions')
|
||||
->changeColumn('end_date', 'date', ['null' => true])
|
||||
->changeColumn('valid_until', 'date', ['null' => true])
|
||||
->update();
|
||||
}
|
||||
public function down(): void {}
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
use Phinx\Migration\AbstractMigration;
|
||||
|
||||
final class CreatePromotionContract extends AbstractMigration
|
||||
final class CreatePromotionBrokers extends AbstractMigration
|
||||
{
|
||||
/**
|
||||
* Change Method.
|
||||
@ -19,12 +19,11 @@ final class CreatePromotionContract extends AbstractMigration
|
||||
*/
|
||||
public function change(): void
|
||||
{
|
||||
$this->table('promotion_contracts')
|
||||
$this->table('promotion_brokers')
|
||||
->addColumn('promotion_id', 'integer', ['signed' => false, 'null' => false])
|
||||
->addColumn('contract_id', 'integer', ['signed' => false, 'null' => false])
|
||||
->addColumn('created_at', 'datetime', ['null' => false, 'default' => 'CURRENT_TIMESTAMP'])
|
||||
->addColumn('broker_rut', 'integer', ['signed' => false, 'null' => false])
|
||||
->addForeignKey('promotion_id', 'promotions', 'id', ['delete' => 'CASCADE', 'update' => 'CASCADE'])
|
||||
->addForeignKey('contract_id', 'broker_contracts', 'id', ['delete' => 'CASCADE', 'update' => 'CASCADE'])
|
||||
->addForeignKey('broker_rut', 'brokers', 'rut', ['delete' => 'CASCADE', 'update' => 'CASCADE'])
|
||||
->create();
|
||||
}
|
||||
}
|
@ -4,7 +4,7 @@ declare(strict_types=1);
|
||||
|
||||
use Phinx\Migration\AbstractMigration;
|
||||
|
||||
final class CreatePromotionContractUnits extends AbstractMigration
|
||||
final class CreatePromotionUnitLines extends AbstractMigration
|
||||
{
|
||||
/**
|
||||
* Change Method.
|
||||
@ -19,13 +19,11 @@ final class CreatePromotionContractUnits extends AbstractMigration
|
||||
*/
|
||||
public function change(): void
|
||||
{
|
||||
$this->table('promotion_contract_units')
|
||||
$this->table('promotion_unit_lines')
|
||||
->addColumn('promotion_id', 'integer', ['signed' => false, 'null' => false])
|
||||
->addColumn('contract_id', 'integer', ['signed' => false, 'null' => false])
|
||||
->addColumn('unit_id', 'integer', ['signed' => false, 'null' => false])
|
||||
->addForeignKey('promotion_id', 'promotions', 'id', ['delete' => 'cascade', 'update' => 'cascade'])
|
||||
->addForeignKey('contract_id', 'broker_contracts', 'id', ['delete' => 'cascade', 'update' => 'cascade'])
|
||||
->addForeignKey('unit_id', 'unidad', 'id', ['delete' => 'cascade', 'update' => 'cascade'])
|
||||
->addColumn('unit_line_id', 'integer', ['signed' => false, 'null' => false])
|
||||
->addForeignKey('promotion_id', 'promotions', 'id', ['delete' => 'CASCADE', 'update' => 'CASCADE'])
|
||||
->addForeignKey('unit_line_id', 'proyecto_tipo_unidad', 'id', ['delete' => 'CASCADE', 'update' => 'CASCADE'])
|
||||
->create();
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
use Phinx\Migration\AbstractMigration;
|
||||
|
||||
final class CreatePromotionUnitTypes extends AbstractMigration
|
||||
{
|
||||
/**
|
||||
* Change Method.
|
||||
*
|
||||
* Write your reversible migrations using this method.
|
||||
*
|
||||
* More information on writing migrations is available here:
|
||||
* https://book.cakephp.org/phinx/0/en/migrations.html#the-change-method
|
||||
*
|
||||
* Remember to call "create()" or "update()" and NOT "save()" when working
|
||||
* with the Table class.
|
||||
*/
|
||||
public function change(): void
|
||||
{
|
||||
$this->table('promotion_unit_types')
|
||||
->addColumn('promotion_id', 'integer', ['signed' => false, 'null' => false])
|
||||
->addColumn('project_id', 'integer', ['signed' => false, 'null' => false])
|
||||
->addColumn('unit_type_id', 'integer', ['signed' => false, 'null' => false])
|
||||
->addForeignKey('promotion_id', 'promotions', 'id', ['delete' => 'CASCADE', 'update' => 'CASCADE'])
|
||||
->addForeignKey('project_id', 'proyecto', 'id', ['delete' => 'CASCADE', 'update' => 'CASCADE'])
|
||||
->addForeignKey('unit_type_id', 'tipo_unidad', 'id', ['delete' => 'CASCADE', 'update' => 'CASCADE'])
|
||||
->create();
|
||||
}
|
||||
}
|
@ -11,12 +11,12 @@ $app->group('/promotion/{promotion_id}', function($app) {
|
||||
$app->post('/add[/]', [Promotions::class, 'addConnections']);
|
||||
$app->group('/project/{project_id}', function($app) {
|
||||
$app->delete('[/]', [Promotions::class, 'removeProject']);
|
||||
$app->group('/unit-type/{unit_type_id}', function($app) {
|
||||
$app->delete('[/]', [Promotions::class, 'removeUnitType']);
|
||||
});
|
||||
});
|
||||
$app->group('/contract/{contract_id}', function($app) {
|
||||
$app->delete('[/]', [Promotions::class, 'removeContract']);
|
||||
});
|
||||
$app->group('/unit-type/{unit_type_id}', function($app) {
|
||||
$app->delete('[/]', [Promotions::class, 'removeUnitType']);
|
||||
$app->group('/broker/{broker_rut}', function($app) {
|
||||
$app->delete('[/]', [Promotions::class, 'removeBroker']);
|
||||
});
|
||||
$app->group('/unit-line/{unit_line_id}', function($app) {
|
||||
$app->delete('[/]', [Promotions::class, 'removeUnitLine']);
|
||||
|
@ -44,7 +44,7 @@
|
||||
|
||||
@push('page_scripts')
|
||||
<script>
|
||||
class ContractTable {
|
||||
class ConnectionTable {
|
||||
table
|
||||
constructor(tab) {
|
||||
const parent = document.querySelector(`.ui.tab.segment[data-tab="${tab}"]`)
|
||||
@ -70,7 +70,7 @@
|
||||
parent.appendChild(this.table)
|
||||
}
|
||||
static fromProjects(data) {
|
||||
const table = new ContractTable('projects_table')
|
||||
const table = new ConnectionTable('projects_table')
|
||||
data.forEach(project => {
|
||||
const row = document.createElement('tr')
|
||||
row.innerHTML = [
|
||||
@ -93,15 +93,15 @@
|
||||
})
|
||||
}
|
||||
static fromBrokers(data) {
|
||||
const table = new ContractTable('brokers_table')
|
||||
data.forEach(contract => {
|
||||
const table = new ConnectionTable('brokers_table')
|
||||
data.forEach(broker => {
|
||||
const row = document.createElement('tr')
|
||||
row.innerHTML = [
|
||||
`<td>${contract.project.descripcion}</td>`,
|
||||
`<td>${contract.broker.name}</td>`,
|
||||
`<td>Todos los Proyectos</td>`,
|
||||
`<td>${broker.name}</td>`,
|
||||
'<td colspan="3">Todas las Unidades</td>',
|
||||
`<td class="right aligned">`,
|
||||
`<button class="ui red icon button remove_button broker" data-id="${contract.id}">`,
|
||||
`<button class="ui red icon button remove_button broker" data-id="${broker.rut}">`,
|
||||
'<i class="plus icon"></i>',
|
||||
'</button>',
|
||||
`</td>`
|
||||
@ -110,13 +110,13 @@
|
||||
})
|
||||
document.querySelectorAll('.remove_button.broker').forEach(button => {
|
||||
button.addEventListener('click', () => {
|
||||
const contract_id = button.dataset.id
|
||||
promotion.remove().contract(contract_id)
|
||||
const broker_rut = button.dataset.id
|
||||
promotion.remove().broker(broker_rut)
|
||||
})
|
||||
})
|
||||
}
|
||||
static fromUnitTypes(data) {
|
||||
const table = new ContractTable('unit-types_table')
|
||||
const table = new ConnectionTable('unit-types_table')
|
||||
data.forEach(unitType => {
|
||||
const row = document.createElement('tr')
|
||||
const tipo = unitType.unitType.descripcion
|
||||
@ -141,7 +141,7 @@
|
||||
})
|
||||
}
|
||||
static fromUnitLines(data) {
|
||||
const table = new ContractTable('unit-lines_table')
|
||||
const table = new ConnectionTable('unit-lines_table')
|
||||
data.forEach(unitLine => {
|
||||
const row = document.createElement('tr')
|
||||
const tipo = unitLine.tipo_unidad.descripcion
|
||||
@ -166,7 +166,7 @@
|
||||
})
|
||||
}
|
||||
static fromUnits(data) {
|
||||
const table = new ContractTable('units_table')
|
||||
const table = new ConnectionTable('units_table')
|
||||
data.forEach(unit => {
|
||||
const row = document.createElement('tr')
|
||||
const tipo = unit.proyecto_tipo_unidad.tipo_unidad.descripcion
|
||||
@ -223,8 +223,8 @@
|
||||
}
|
||||
})
|
||||
},
|
||||
contract: contract_id => {
|
||||
const url = `{{$urls->api}}/ventas/promotion/{{ $promotion->id }}/connections/contract/${contract_id}`
|
||||
broker: broker_rut => {
|
||||
const url = `{{$urls->api}}/ventas/promotion/{{ $promotion->id }}/connections/broker/${broker_rut}`
|
||||
const method = 'delete'
|
||||
return APIClient.fetch(url, {method}).then(response => response.json()).then(json => {
|
||||
if (json.success) {
|
||||
@ -271,36 +271,36 @@
|
||||
this.watch().add()
|
||||
|
||||
@if (count($promotion->projects()) > 0)
|
||||
ContractTable.fromProjects({!! json_encode($promotion->projects()) !!})
|
||||
ConnectionTable.fromProjects({!! json_encode($promotion->projects()) !!})
|
||||
@else
|
||||
ContractTable.fromProjects([])
|
||||
ConnectionTable.fromProjects([])
|
||||
@endif
|
||||
@if (count($promotion->contracts()) > 0)
|
||||
ContractTable.fromBrokers({!! json_encode(array_map(function($contract) {$arr = json_decode(json_encode($contract));$arr['project'] = $contract->project; $arr['broker'] = $contract->broker;},$promotion->contracts())) !!})
|
||||
@if (count($promotion->brokers()) > 0)
|
||||
ConnectionTable.fromBrokers({!! json_encode($promotion->brokers()) !!})
|
||||
@else
|
||||
ContractTable.fromBrokers([])
|
||||
ConnectionTable.fromBrokers([])
|
||||
@endif
|
||||
@if (count($promotion->unitTypes()) > 0)
|
||||
ContractTable.fromUnitTypes({!! json_encode($promotion->unitTypes()) !!})
|
||||
ConnectionTable.fromUnitTypes({!! json_encode($promotion->unitTypes()) !!})
|
||||
@else
|
||||
ContractTable.fromUnitTypes([])
|
||||
ConnectionTable.fromUnitTypes([])
|
||||
@endif
|
||||
@if (count($promotion->unitLines()) > 0)
|
||||
ContractTable.fromUnitLines({!! json_encode($promotion->unitLines()) !!})
|
||||
ConnectionTable.fromUnitLines({!! json_encode($promotion->unitLines()) !!})
|
||||
@else
|
||||
ContractTable.fromUnitLines([])
|
||||
ConnectionTable.fromUnitLines([])
|
||||
@endif
|
||||
@if (count($promotion->units()) > 0)
|
||||
ContractTable.fromUnits({!! json_encode($promotion->units()) !!})
|
||||
ConnectionTable.fromUnits({!! json_encode($promotion->units()) !!})
|
||||
@else
|
||||
ContractTable.fromUnits([])
|
||||
ConnectionTable.fromUnits([])
|
||||
@endif
|
||||
}
|
||||
}
|
||||
$(document).ready(() => {
|
||||
promotion.setup({
|
||||
menu: 'tables_tab_menu',
|
||||
table: 'contracts',
|
||||
table: 'connections',
|
||||
button: {
|
||||
add: 'add_button'
|
||||
}
|
||||
|
@ -7,7 +7,7 @@
|
||||
<input type="hidden" name="promotion_id" value="{{$promotion->id}}" />
|
||||
<div class="field" id="type">
|
||||
<label>Tipo</label>
|
||||
@foreach (['Proyecto' => 'project', 'Operador' => 'operator', 'Tipo' => 'type', 'Línea' => 'line', 'Unidad' => 'unit'] as $type => $value)
|
||||
@foreach (['Proyecto' => 'project', 'Operador' => 'broker', 'Tipo' => 'type', 'Línea' => 'line', 'Unidad' => 'unit'] as $type => $value)
|
||||
<div class="ui radio checkbox type" data-tab="{{ $value }}">
|
||||
<input type="radio" name="type" value="{{$value}}" @if ($value === 'project') checked="checked"@endif />
|
||||
<label>{{$type}}</label>
|
||||
@ -29,16 +29,16 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui tab segment" data-tab="operator">
|
||||
<div class="ui tab segment" data-tab="broker">
|
||||
<div class="field">
|
||||
<label>Operador</label>
|
||||
<div class="ui search multiple selection dropdown" id="operator">
|
||||
<input type="hidden" name="operator[]" />
|
||||
<div class="ui search multiple selection dropdown" id="broker">
|
||||
<input type="hidden" name="broker[]" />
|
||||
<i class="dropdown icon"></i>
|
||||
<div class="default text">Operador</div>
|
||||
<div class="menu">
|
||||
@foreach ($contracts as $contract)
|
||||
<div class="item" data-value="{{$contract->id}}">{{$contract->broker->name}} - {{$contract->project->descripcion}}</div>
|
||||
@foreach ($brokers as $broker)
|
||||
<div class="item" data-value="{{$broker->rut}}">{{$broker->name}}</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
@ -152,7 +152,7 @@
|
||||
line: 'line',
|
||||
unit_project: 'unit_project',
|
||||
unit: 'unit',
|
||||
operator: 'operator'
|
||||
broker: 'broker'
|
||||
}
|
||||
this.modal = $(`#${this.ids.modal}`).modal({
|
||||
onApprove: () => {
|
||||
|
@ -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