Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tarea #3301 agregar direccion a documentos compra #1575

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
124 changes: 124 additions & 0 deletions Core/Base/AjaxForms/PurchasesHeaderHTML.php
Expand Up @@ -21,10 +21,14 @@

use FacturaScripts\Core\Base\Contract\PurchasesModInterface;
use FacturaScripts\Core\Base\Translator;
use FacturaScripts\Core\DataSrc\Paises;
use FacturaScripts\Core\Model\Base\PurchaseDocument;
use FacturaScripts\Core\Model\User;
use FacturaScripts\Core\Tools;
use FacturaScripts\Dinamic\Model\Ciudad;
use FacturaScripts\Dinamic\Model\Pais;
use FacturaScripts\Dinamic\Model\Proveedor;
use FacturaScripts\Dinamic\Model\Provincia;

/**
* Description of PurchasesHeaderHTML
Expand Down Expand Up @@ -83,6 +87,12 @@ public static function apply(PurchaseDocument &$model, array $formData, User $us
$model->numproveedor = $formData['numproveedor'] ?? $model->numproveedor;
$model->operacion = $formData['operacion'] ?? $model->operacion;
$model->tasaconv = (float)($formData['tasaconv'] ?? $model->tasaconv);
$model->apartado = $formData['apartado'] ?? $model->apartado;
$model->ciudad = $formData['ciudad'] ?? $model->ciudad;
$model->codpais = $formData['codpais'] ?? $model->codpais;
$model->codpostal = $formData['codpostal'] ?? $model->codpostal;
$model->direccion = $formData['direccion'] ?? $model->direccion;
$model->provincia = $formData['provincia'] ?? $model->provincia;

foreach (['fechadevengo'] as $key) {
if (isset($formData[$key])) {
Expand All @@ -104,6 +114,19 @@ public static function assets()
}
}

private static function addressField(Translator $i18n, PurchaseDocument $model, string $field, string $label, int $size, int $maxlength): string
{
$attributes = $model->editable && (empty($model->idcontactofact) || empty($model->direccion)) ?
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@NeoRazorX aquí tengo dudas si en los proveedores se tienen que deshabilitar los inputs en algún momento o siempre se pueden quedar habilitados.

como he copiado varios metodos para pintar los inputs desde el SalesHeader, me he traido esta propiedad y no existe en los proveedores: $model->idcontactofact. deberia borrarla pero me deshabilita entonces los inputs

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tampoco sé que es lo que hay que modificar al generar los PDF que se menciona en la tarea pero no he logrado ver que es lo que afecta a los nuevos campos de dirección.

'name="' . $field . '" maxlength="' . $maxlength . '" autocomplete="off"' :
'disabled=""';

return '<div class="col-sm-' . $size . '">'
. '<div class="form-group">' . $i18n->trans($label)
. '<input type="text" ' . $attributes . ' value="' . Tools::noHtml($model->{$field}) . '" class="form-control"/>'
. '</div>'
. '</div>';
}

public static function render(PurchaseDocument $model): string
{
$i18n = new Translator();
Expand All @@ -130,6 +153,55 @@ public static function render(PurchaseDocument $model): string
. '</div>';
}

private static function ciudad(Translator $i18n, PurchaseDocument $model, int $size, int $maxlength): string
{
$list = '';
$dataList = '';
$attributes = $model->editable && (empty($model->idcontactofact) || empty($model->direccion)) ?
'name="ciudad" maxlength="' . $maxlength . '" autocomplete="off"' :
'disabled=""';

if ($model->editable) {
// pre-cargamos listado de ciudades
$list = 'list="ciudades"';
$dataList = '<datalist id="ciudades">';

$ciudadModel = new Ciudad();
foreach ($ciudadModel->all([], ['ciudad' => 'ASC'], 0, 0) as $ciudad) {
$dataList .= '<option value="' . $ciudad->ciudad . '">' . $ciudad->ciudad . '</option>';
}
$dataList .= '</datalist>';
}

return '<div class="col-sm-' . $size . '">'
. '<div class="form-group">' . $i18n->trans('city')
. '<input type="text" ' . $attributes . ' value="' . Tools::noHtml($model->ciudad) . '" ' . $list . ' class="form-control"/>'
. $dataList
. '</div>'
. '</div>';
}

private static function codpais(Translator $i18n, PurchaseDocument $model): string
{
$options = [];
foreach (Paises::all() as $pais) {
$options[] = ($pais->codpais === $model->codpais) ?
'<option value="' . $pais->codpais . '" selected>' . $pais->nombre . '</option>' :
'<option value="' . $pais->codpais . '">' . $pais->nombre . '</option>';
}

$pais = new Pais();
$attributes = $model->editable && (empty($model->idcontactofact) || empty($model->direccion)) ?
'name="codpais"' :
'disabled=""';
return '<div class="col-sm-6">'
. '<div class="form-group">'
. '<a href="' . $pais->url() . '">' . $i18n->trans('country') . '</a>'
. '<select ' . $attributes . ' class="form-control">' . implode('', $options) . '</select>'
. '</div>'
. '</div>';
}

private static function codproveedor(Translator $i18n, PurchaseDocument $model): string
{
$proveedor = new Proveedor();
Expand Down Expand Up @@ -200,6 +272,12 @@ private static function detailModal(Translator $i18n, PurchaseDocument $model):
. '<div class="form-row">'
. self::renderField($i18n, $model, 'nombre')
. self::renderField($i18n, $model, 'cifnif')
. self::renderField($i18n, $model, 'direccion')
. self::renderField($i18n, $model, 'apartado')
. self::renderField($i18n, $model, 'codpostal')
. self::renderField($i18n, $model, 'ciudad')
. self::renderField($i18n, $model, 'provincia')
. self::renderField($i18n, $model, 'codpais')
. self::renderField($i18n, $model, 'fechadevengo')
. self::renderField($i18n, $model, 'hora')
. self::renderField($i18n, $model, 'operacion')
Expand Down Expand Up @@ -240,6 +318,34 @@ private static function numproveedor(Translator $i18n, PurchaseDocument $model):
. '</div>';
}

private static function provincia(Translator $i18n, PurchaseDocument $model, int $size, int $maxlength): string
{
$list = '';
$dataList = '';
$attributes = $model->editable && (empty($model->idcontactofact) || empty($model->direccion)) ?
'name="provincia" maxlength="' . $maxlength . '" autocomplete="off"' :
'disabled=""';

if ($model->editable) {
// pre-cargamos listado de provincias
$list = 'list="provincias"';
$dataList = '<datalist id="provincias">';

$provinciaModel = new Provincia();
foreach ($provinciaModel->all([], ['provincia' => 'ASC'], 0, 0) as $provincia) {
$dataList .= '<option value="' . $provincia->provincia . '">' . $provincia->provincia . '</option>';
}
$dataList .= '</datalist>';
}

return '<div class="col-sm-' . $size . '">'
. '<div class="form-group">' . $i18n->trans('province')
. '<input type="text" ' . $attributes . ' value="' . Tools::noHtml($model->provincia) . '" ' . $list . ' class="form-control"/>'
. $dataList
. '</div>'
. '</div>';
}

private static function renderField(Translator $i18n, PurchaseDocument $model, string $field): ?string
{
foreach (self::$mods as $mod) {
Expand Down Expand Up @@ -268,9 +374,15 @@ private static function renderField(Translator $i18n, PurchaseDocument $model, s
case '_parents':
return self::parents($i18n, $model);

case 'apartado':
return self::addressField($i18n, $model, 'apartado', 'post-office-box', 4, 10);

case 'cifnif':
return self::cifnif($i18n, $model);

case 'ciudad':
return self::ciudad($i18n, $model, 4, 100);

case 'codalmacen':
return self::codalmacen($i18n, $model, 'purchasesFormAction');

Expand All @@ -280,12 +392,21 @@ private static function renderField(Translator $i18n, PurchaseDocument $model, s
case 'codpago':
return self::codpago($i18n, $model);

case 'codpais':
return self::codpais($i18n, $model);

case 'codpostal':
return self::addressField($i18n, $model, 'codpostal', 'zip-code', 4, 10);

case 'codproveedor':
return self::codproveedor($i18n, $model);

case 'codserie':
return self::codserie($i18n, $model, 'purchasesFormAction');

case 'direccion':
return self::addressField($i18n, $model, 'direccion', 'address', 12, 100);

case 'fecha':
return self::fecha($i18n, $model);

Expand All @@ -310,6 +431,9 @@ private static function renderField(Translator $i18n, PurchaseDocument $model, s
case 'operacion':
return self::operacion($i18n, $model);

case 'provincia':
return self::provincia($i18n, $model, 6, 100);

case 'tasaconv':
return self::tasaconv($i18n, $model);

Expand Down
70 changes: 68 additions & 2 deletions Core/Model/Base/PurchaseDocument.php
Expand Up @@ -23,6 +23,7 @@
use FacturaScripts\Core\Model\Proveedor as CoreProveedor;
use FacturaScripts\Core\Model\User;
use FacturaScripts\Core\Tools;
use FacturaScripts\Dinamic\Model\Pais;
use FacturaScripts\Dinamic\Model\ProductoProveedor;
use FacturaScripts\Dinamic\Model\Proveedor;
use FacturaScripts\Dinamic\Model\Variante;
Expand All @@ -34,6 +35,48 @@
*/
abstract class PurchaseDocument extends TransformerDocument
{
/**
* Supplier's mailbox.
*
* @var string
*/
public $apartado;

/**
* Supplier's city.
*
* @var string
*/
public $ciudad;

/**
* Supplier's country.
*
* @var string
*/
public $codpais;

/**
* Supplier's postal code.
*
* @var string
*/
public $codpostal;

/**
* Supplier's address
*
* @var string
*/
public $direccion;

/**
* Supplier's province.
*
* @var string
*/
public $provincia;

/**
* Supplier code for this document.
*
Expand All @@ -42,7 +85,7 @@ abstract class PurchaseDocument extends TransformerDocument
public $codproveedor;

/**
* Provider's name.
* Supplier's name.
*
* @var string
*/
Expand All @@ -59,12 +102,23 @@ abstract class PurchaseDocument extends TransformerDocument
public function clear()
{
parent::clear();
$this->direccion = '';

// select default currency
$coddivisa = Tools::settings('default', 'coddivisa');
$this->setCurrency($coddivisa, true);
}

public function country(): string
{
$country = new Pais();
if ($country->loadFromCode($this->codpais)) {
return Tools::fixHtml($country->nombre) ?? '';
}

return $this->codpais ?? '';
}

/**
* Returns a new document line with the data of the product. Finds product
* by reference or barcode.
Expand Down Expand Up @@ -164,6 +218,12 @@ public function setSubject($subject): bool
$this->codproveedor = $subject->codproveedor;
$this->nombre = $subject->razonsocial;
$this->cifnif = $subject->cifnif ?? '';
$this->apartado = $subject->getDefaultAddress()->apartado;
$this->ciudad = $subject->getDefaultAddress()->ciudad;
$this->codpostal = $subject->getDefaultAddress()->codpostal;
$this->direccion = $subject->getDefaultAddress()->direccion;
$this->provincia = $subject->getDefaultAddress()->provincia;
$this->codpais = $subject->getDefaultAddress()->codpais;

// commercial data
if (empty($this->primaryColumnValue())) {
Expand Down Expand Up @@ -192,6 +252,12 @@ public function test(): bool
$this->nombre = Tools::noHtml($this->nombre);
$this->numproveedor = Tools::noHtml($this->numproveedor);

$this->apartado = Tools::noHtml($this->apartado);
$this->ciudad = Tools::noHtml($this->ciudad);
$this->codpostal = Tools::noHtml($this->codpostal);
$this->direccion = Tools::noHtml($this->direccion);
$this->provincia = Tools::noHtml($this->provincia);

return parent::test();
}

Expand Down Expand Up @@ -232,7 +298,7 @@ protected function setLastSupplierPrice(&$newLine)

protected function setPreviousData(array $fields = [])
{
$more = ['codproveedor'];
$more = ['codproveedor', 'direccion'];
parent::setPreviousData(array_merge($more, $fields));
}
}
24 changes: 24 additions & 0 deletions Core/Table/albaranesprov.xml
Expand Up @@ -155,6 +155,30 @@
<type>double precision</type>
<default>0</default>
</column>
<column>
<name>apartado</name>
<type>character varying(10)</type>
</column>
<column>
<name>ciudad</name>
<type>character varying(100)</type>
</column>
<column>
<name>codpais</name>
<type>character varying(20)</type>
</column>
<column>
<name>codpostal</name>
<type>character varying(10)</type>
</column>
<column>
<name>direccion</name>
<type>character varying(100)</type>
</column>
<column>
<name>provincia</name>
<type>character varying(100)</type>
</column>
<constraint>
<name>albaranesprov_pkey</name>
<type>PRIMARY KEY (idalbaran)</type>
Expand Down
24 changes: 24 additions & 0 deletions Core/Table/facturasprov.xml
Expand Up @@ -181,6 +181,30 @@
<type>boolean</type>
<default>false</default>
</column>
<column>
<name>apartado</name>
<type>character varying(10)</type>
</column>
<column>
<name>ciudad</name>
<type>character varying(100)</type>
</column>
<column>
<name>codpais</name>
<type>character varying(20)</type>
</column>
<column>
<name>codpostal</name>
<type>character varying(10)</type>
</column>
<column>
<name>direccion</name>
<type>character varying(100)</type>
</column>
<column>
<name>provincia</name>
<type>character varying(100)</type>
</column>
<constraint>
<name>facturasprov_pkey</name>
<type>PRIMARY KEY (idfactura)</type>
Expand Down