diff --git a/Core/Base/AjaxForms/SalesHeaderHTML.php b/Core/Base/AjaxForms/SalesHeaderHTML.php index 7e8564fe4..d173dd5ab 100644 --- a/Core/Base/AjaxForms/SalesHeaderHTML.php +++ b/Core/Base/AjaxForms/SalesHeaderHTML.php @@ -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; } @@ -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; } diff --git a/Core/Controller/EditCliente.php b/Core/Controller/EditCliente.php index 5b7ed43a4..6fb0f9c57 100644 --- a/Core/Controller/EditCliente.php +++ b/Core/Controller/EditCliente.php @@ -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 @@ -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'); } /** @@ -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 */ @@ -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); diff --git a/Core/Controller/EditEmpresa.php b/Core/Controller/EditEmpresa.php index c1ba34c1f..d13d864d0 100644 --- a/Core/Controller/EditEmpresa.php +++ b/Core/Controller/EditEmpresa.php @@ -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 @@ -69,6 +71,7 @@ protected function createViews() $this->createViewBankAccounts(); $this->createViewPaymentMethods(); $this->createViewExercises(); + $this->createViewSettings(); } protected function createViewBankAccounts(string $viewName = 'ListCuentaBanco'): void @@ -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(); @@ -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); diff --git a/Core/Model/Cliente.php b/Core/Model/Cliente.php index e26356672..2936300e2 100644 --- a/Core/Model/Cliente.php +++ b/Core/Model/Cliente.php @@ -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 ?? []; + } } diff --git a/Core/Model/Empresa.php b/Core/Model/Empresa.php index 1746feb4a..7486c4966 100644 --- a/Core/Model/Empresa.php +++ b/Core/Model/Empresa.php @@ -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 ?? []; + } } diff --git a/Core/Model/SettingsModel.php b/Core/Model/SettingsModel.php new file mode 100644 index 000000000..482d6ba1a --- /dev/null +++ b/Core/Model/SettingsModel.php @@ -0,0 +1,54 @@ +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); + } +} diff --git a/Core/Table/settings_model.xml b/Core/Table/settings_model.xml new file mode 100644 index 000000000..44ae7bdd6 --- /dev/null +++ b/Core/Table/settings_model.xml @@ -0,0 +1,28 @@ + + + + id + serial + NO + + + classnamemodel + text + + + idmodel + integer + + + idempresa + integer + + + settings + text + + + settings_model_pkey + PRIMARY KEY (id) + +
\ No newline at end of file diff --git a/Core/XMLView/EditSettingsModel.xml b/Core/XMLView/EditSettingsModel.xml new file mode 100644 index 000000000..ad7423510 --- /dev/null +++ b/Core/XMLView/EditSettingsModel.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +