Skip to content

Commit

Permalink
Merge 3ff92be into 40a6ed9
Browse files Browse the repository at this point in the history
  • Loading branch information
elguitarraverde committed Apr 15, 2024
2 parents 40a6ed9 + 3ff92be commit d0f8673
Show file tree
Hide file tree
Showing 8 changed files with 276 additions and 0 deletions.
12 changes: 12 additions & 0 deletions Core/Base/AjaxForms/SalesHeaderHTML.php
Expand Up @@ -67,6 +67,12 @@ public static function apply(SalesDocument &$model, array $formData, User $user)
$model->setAuthor($user);
if (isset($formData['codcliente']) && $formData['codcliente'] && $cliente->loadFromCode($formData['codcliente'])) {
$model->setSubject($cliente);

$model->codalmacen = $model->getSubject()->getSettings($model->idempresa)['codalmacen'] ?? $model->getCompany()->getSettings()['codalmacen'] ?? $model->codalmacen;
$model->codpago = $model->getSubject()->getSettings($model->idempresa)['codpago'] ?? $model->getCompany()->getSettings()['codpago'] ?? $model->codpago;
$model->codserie = $model->getSubject()->getSettings($model->idempresa)['codserie'] ?? $model->getCompany()->getSettings()['codserie'] ?? $model->codserie;
$model->coddivisa = $model->getSubject()->getSettings($model->idempresa)['$this->coddivisa'] ?? $model->getCompany()->getSettings()['$this->coddivisa'] ?? $model->coddivisa;

if (empty($formData['action']) || $formData['action'] === 'set-customer') {
return;
}
Expand All @@ -76,6 +82,12 @@ public static function apply(SalesDocument &$model, array $formData, User $user)
$cliente->loadFromCode($formData['codcliente'])) {
// existing record and change customer
$model->setSubject($cliente);

$model->codalmacen = $model->getSubject()->getSettings($model->idempresa)['codalmacen'] ?? $model->getCompany()->getSettings()['codalmacen'] ?? $model->codalmacen;
$model->codpago = $model->getSubject()->getSettings($model->idempresa)['codpago'] ?? $model->getCompany()->getSettings()['codpago'] ?? $model->codpago;
$model->codserie = $model->getSubject()->getSettings($model->idempresa)['codserie'] ?? $model->getCompany()->getSettings()['codserie'] ?? $model->codserie;
$model->coddivisa = $model->getSubject()->getSettings($model->idempresa)['$this->coddivisa'] ?? $model->getCompany()->getSettings()['$this->coddivisa'] ?? $model->coddivisa;

return;
}

Expand Down
56 changes: 56 additions & 0 deletions Core/Controller/EditCliente.php
Expand Up @@ -25,6 +25,8 @@
use FacturaScripts\Core\Tools;
use FacturaScripts\Dinamic\Lib\CustomerRiskTools;
use FacturaScripts\Dinamic\Lib\RegimenIVA;
use FacturaScripts\Dinamic\Model\Cliente;
use FacturaScripts\Dinamic\Model\SettingsModel;

/**
* Controller to edit a single item from the Cliente model
Expand Down Expand Up @@ -143,6 +145,13 @@ protected function createViews()
if ($this->user->can('EditReciboCliente')) {
$this->createReceiptView('ListReciboCliente', 'ReciboCliente');
}

$this->createViewSettings();
}

protected function createViewSettings(string $viewName = 'EditSettingsModel'): void
{
$this->addEditListView($viewName, 'SettingsModel', 'settings', 'fas fa-wrench');
}

/**
Expand All @@ -161,6 +170,36 @@ protected function editAction()
return $return;
}

protected function execPreviousAction($action)
{
if ($this->active === 'EditSettingsModel' && in_array($action, ['edit', 'insert'])){

/** @var Cliente $cliente */
$cliente = $this->getModel();
$cliente->loadFromCode($this->request->get('code'));

/** @var SettingsModel $settingsModel */
$settingsModel = $this->views[$this->active]->model;
$settingsModel->loadFromCode('', [
new DataBaseWhere('classnamemodel', get_class($cliente)),
new DataBaseWhere('idmodel', $cliente->primaryColumnValue()),
new DataBaseWhere('idempresa', $this->request->request->get('idempresa')),
]);

$settingsModel->classnamemodel = get_class($cliente);
$settingsModel->idmodel = $cliente->primaryColumnValue();
$settingsModel->idempresa = $this->request->request->get('idempresa');
$settingsModel->settings = json_encode([
'codalmacen' => empty($this->request->request->get('codalmacen')) ? null : $this->request->request->get('codalmacen'),
'codserie' => empty($this->request->request->get('codserie')) ? null : $this->request->request->get('codserie'),
'coddivisa' => empty($this->request->request->get('coddivisa')) ? null : $this->request->request->get('coddivisa'),
'codpago' => empty($this->request->request->get('codpago')) ? null : $this->request->request->get('codpago'),
]);
}

return parent::execPreviousAction($action);
}

/**
* @return bool
*/
Expand Down Expand Up @@ -219,6 +258,23 @@ protected function loadData($viewName, $view)
$view->loadData('', $where);
break;

case 'EditSettingsModel':
$where = [
new DataBaseWhere('classnamemodel', get_class($this->getModel())),
new DataBaseWhere('idmodel', $codcliente),
];
$view->loadData('', $where);

// agregamos al modelo las propiedades que hay dentro de settings
// para conservar la clase con todas las propiedades y que detecte si el modelo existe o no.
foreach($view->cursor as $model){
foreach ($model->settings as $key => $value) {
$model->{$key} = $value;
}
}

break;

case $mainViewName:
parent::loadData($viewName, $view);
$this->loadLanguageValues($viewName);
Expand Down
56 changes: 56 additions & 0 deletions Core/Controller/EditEmpresa.php
Expand Up @@ -24,6 +24,8 @@
use FacturaScripts\Core\Lib\ExtendedController\EditController;
use FacturaScripts\Core\Tools;
use FacturaScripts\Dinamic\Lib\RegimenIVA;
use FacturaScripts\Dinamic\Model\Empresa;
use FacturaScripts\Dinamic\Model\SettingsModel;

/**
* Controller to edit a single item from the Empresa model
Expand Down Expand Up @@ -69,6 +71,7 @@ protected function createViews()
$this->createViewBankAccounts();
$this->createViewPaymentMethods();
$this->createViewExercises();
$this->createViewSettings();
}

protected function createViewBankAccounts(string $viewName = 'ListCuentaBanco'): void
Expand All @@ -95,8 +98,39 @@ protected function createViewWarehouse(string $viewName = 'EditAlmacen'): void
->disableColumn('company');
}

protected function createViewSettings(string $viewName = 'EditSettingsModel'): void
{
$this->addEditView($viewName, 'SettingsModel', 'settings', 'fas fa-wrench');
}

protected function execPreviousAction($action): bool
{
if ($this->active === 'EditSettingsModel' && in_array($action, ['edit', 'insert'])){

/** @var Empresa $empresa */
$empresa = $this->getModel();
$empresa->loadFromCode($this->request->get('code'));
$this->request->request->set('idempresa', $empresa->primaryColumnValue());

/** @var SettingsModel $settingsModel */
$settingsModel = $this->views[$this->active]->model;
$settingsModel->loadFromCode('', [
new DataBaseWhere('classnamemodel', get_class($empresa)),
new DataBaseWhere('idmodel', $empresa->primaryColumnValue()),
new DataBaseWhere('idempresa', $empresa->primaryColumnValue()),
]);

$settingsModel->classnamemodel = get_class($empresa);
$settingsModel->idmodel = $empresa->primaryColumnValue();
$settingsModel->idempresa = $empresa->primaryColumnValue();
$settingsModel->settings = json_encode([
'codalmacen' => empty($this->request->request->get('codalmacen')) ? null : $this->request->request->get('codalmacen'),
'codserie' => empty($this->request->request->get('codserie')) ? null : $this->request->request->get('codserie'),
'coddivisa' => empty($this->request->request->get('coddivisa')) ? null : $this->request->request->get('coddivisa'),
'codpago' => empty($this->request->request->get('codpago')) ? null : $this->request->request->get('codpago'),
]);
}

switch ($action) {
case 'check-vies':
return $this->checkViesAction();
Expand Down Expand Up @@ -125,6 +159,28 @@ protected function loadData($viewName, $view)
$where = [new DataBaseWhere('idempresa', $id)];
$view->loadData('', $where);
break;
case 'EditSettingsModel':
/** @var Empresa $empresa */
$empresa = $this->getModel();
$empresa->loadFromCode($this->request->get('code'));

/** @var SettingsModel $settingsModel */
$settingsModel = $this->views[$viewName]->model;
$where = [
new DataBaseWhere('classnamemodel', get_class($empresa)),
new DataBaseWhere('idempresa', $empresa->idempresa),
];
$settingsModel->loadFromCode('', $where);

if($settingsModel->exists()){
// agregamos al modelo las propiedades que hay dentro de settings
// para conservar la clase con todas las propiedades y que detecte si el modelo existe o no.
foreach ($this->views[$viewName]->model->settings as $key => $value) {
$this->views[$viewName]->model->{$key} = $value;
}
}

break;

case $mvn:
parent::loadData($viewName, $view);
Expand Down
18 changes: 18 additions & 0 deletions Core/Model/Cliente.php
Expand Up @@ -315,4 +315,22 @@ protected function saveInsert(array $values = []): bool

return $return;
}

/**
* Devuelve las settings de la empresa
*
* @param string $idCompany
* @return array
*/
public function getSettings(string $idCompany)
{
$settingsModel = new SettingsModel();
$settingsModel->loadFromCode('', [
new DataBaseWhere('classnamemodel', static::class),
new DataBaseWhere('idmodel', $this->primaryColumnValue()),
new DataBaseWhere('idempresa', $idCompany),
]);

return $settingsModel->settings ?? [];
}
}
17 changes: 17 additions & 0 deletions Core/Model/Empresa.php
Expand Up @@ -239,4 +239,21 @@ protected function saveInsert(array $values = []): bool

return parent::saveInsert($values) && $this->createPaymentMethods() && $this->createWarehouse();
}

/**
* Devuelve las settings de la empresa
*
* @return array
*/
public function getSettings()
{
$settingsModel = new SettingsModel();
$settingsModel->loadFromCode('', [
new DataBaseWhere('classnamemodel', static::class),
new DataBaseWhere('idmodel', $this->primaryColumnValue()),
new DataBaseWhere('idempresa', $this->primaryColumnValue()),
]);

return $settingsModel->settings ?? [];
}
}
54 changes: 54 additions & 0 deletions Core/Model/SettingsModel.php
@@ -0,0 +1,54 @@
<?php declare(strict_types=1);

namespace FacturaScripts\Core\Model;

class SettingsModel extends Base\ModelClass
{
use Base\ModelTrait;

/** @var int */
public $id;

/** @var string */
public $classnamemodel;

/** @var string */
public $idmodel;

/** @var string */
public $idempresa;

/** @var array */
public $settings;

public static function primaryColumn(): string
{
return 'id';
}

public static function tableName(): string
{
return 'settings_model';
}

public function loadFromData(array $data = [], array $exclude = []): void
{
parent::loadFromData($data, ['settings', 'action']);
$this->settings = isset($data['settings']) ? json_decode($data['settings'], true) : [];
}

protected function saveUpdate(array $values = []): bool
{
// agregamos a la propiedad settings las propiedades que hay en el modelo
// y que nos vienen de la request/inputs
foreach ($this->settings as $key => $value) {
$this->settings[$key] = empty($this->{$key}) ? null : $this->{$key};
}

if (is_array($this->settings)) {
$this->settings = json_encode($this->settings);
}

return parent::saveUpdate($values);
}
}
28 changes: 28 additions & 0 deletions Core/Table/settings_model.xml
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<table>
<column>
<name>id</name>
<type>serial</type>
<null>NO</null>
</column>
<column>
<name>classnamemodel</name>
<type>text</type>
</column>
<column>
<name>idmodel</name>
<type>integer</type>
</column>
<column>
<name>idempresa</name>
<type>integer</type>
</column>
<column>
<name>settings</name>
<type>text</type>
</column>
<constraint>
<name>settings_model_pkey</name>
<type>PRIMARY KEY (id)</type>
</constraint>
</table>
35 changes: 35 additions & 0 deletions Core/XMLView/EditSettingsModel.xml
@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<view>
<columns>
<group name="default" valign="bottom" numcolumns="12">
<column name="name" display="none" order="0">
<widget type="text" fieldname="name" readonly="true" required="true"/>
</column>
<column name="company" order="110">
<widget type="select" fieldname="idempresa" required="true">
<values source="empresas" fieldcode="idempresa" fieldtitle="nombrecorto"></values>
</widget>
</column>
<column name="warehouse" order="120">
<widget type="select" fieldname="codalmacen" onclick="EditAlmacen" required="true">
<values source="almacenes" fieldcode="codalmacen" fieldtitle="nombre"/>
</widget>
</column>
<column name="serie" numcolumns="3" order="130">
<widget type="select" fieldname="codserie" onclick="EditSerie">
<values source="series" fieldcode="codserie" fieldtitle="descripcion"/>
</widget>
</column>
<column name="currency" numcolumns="3" order="140">
<widget type="select" fieldname="coddivisa" onclick="EditDivisa" icon="fas fa-money-bill-alt">
<values source="divisas" fieldcode="coddivisa" fieldtitle="descripcion"/>
</widget>
</column>
<column name="payment-method" numcolumns="3" order="150">
<widget type="select" fieldname="codpago" onclick="EditFormaPago">
<values source="formaspago" fieldcode="codpago" fieldtitle="descripcion"/>
</widget>
</column>
</group>
</columns>
</view>

0 comments on commit d0f8673

Please sign in to comment.