terminando form de clientes direcciones

This commit is contained in:
2023-12-17 08:58:26 +01:00
parent d4246ca99b
commit d9083aac2d
15 changed files with 350 additions and 79 deletions

View File

@ -344,7 +344,7 @@ $routes->group('cliente', ['namespace' => 'App\Controllers\Clientes'], function
$routes->post('add', 'Cliente::add', ['as' => 'createCliente']);
$routes->post('create', 'Cliente::create', ['as' => 'ajaxCreateCliente']);
$routes->put('(:num)/update', 'Cliente::update/$1', ['as' => 'ajaxUpdateCliente']);
$routes->post('(:num)/edit', 'Cliente::edit/$1', ['as' => 'updateCliente']);
$routes->post('edit/(:num)', 'Cliente::edit/$1', ['as' => 'updateCliente']);
$routes->get('delete/(:num)', 'Cliente::delete/$1', ['as' => 'deleteCliente']);
$routes->post('datatable', 'Cliente::datatable', ['as' => 'dataTableOfClientes']);
$routes->post('allmenuitems', 'Cliente::allItemsSelect', ['as' => 'select2ItemsOfClientes']);

View File

@ -78,7 +78,8 @@ class Cliente extends \App\Controllers\GoBaseResourceController
public function add()
{
// JJO
$session = session();
$requestMethod = $this->request->getMethod();
@ -90,6 +91,8 @@ class Cliente extends \App\Controllers\GoBaseResourceController
$sanitizedData = $this->sanitized($postData, $nullIfEmpty);
// JJO
$sanitizedData['user_created_id'] = $session->id_user;
$noException = true;
if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) :
@ -148,6 +151,9 @@ class Cliente extends \App\Controllers\GoBaseResourceController
public function edit($requestedId = null)
{
// JJO
$session = session();
if ($requestedId == null) :
return $this->redirect2listView();
endif;
@ -181,6 +187,9 @@ class Cliente extends \App\Controllers\GoBaseResourceController
$sanitizedData['tirada_flexible'] = false;
}
// JJO
$sanitizedData['user_updated_id'] = $session->id_user;
$noException = true;
if ($successfulResult = $this->canValidate()) : // if ($successfulResult = $this->validate($this->formValidationRules) ) :
@ -338,15 +347,10 @@ class Cliente extends \App\Controllers\GoBaseResourceController
protected function getPaisListItems($selId = null)
{
$data = ['' => lang('Basic.global.pleaseSelectA', [mb_strtolower(lang('Paises.pais'))])];
if (!empty($selId)) :
$paisModel = model('App\Models\Configuracion\PaisModel');
$onlyActiveOnes = true;
$data = $paisModel->getAllForMenu('id, nombre', 'nombre', $onlyActiveOnes);
$selOption = $paisModel->where('id', $selId)->findColumn('nombre');
if (!empty($selOption)) :
$data[$selId] = $selOption[0];
endif;
endif;
return $data;
}

50
ci4/app/Controllers/Clientes/Clientedirecciones.php Normal file → Executable file
View File

@ -53,4 +53,54 @@ class Clientedirecciones extends \App\Controllers\GoBaseResourceController
return $this->failUnauthorized('Invalid request', 403);
}
}
public function datatable_editor()
{
if ($this->request->isAJAX()) {
include(APPPATH . "ThirdParty/DatatablesEditor/DataTables.php");
// Build our Editor instance and process the data coming from _POST
$response = Editor::inst($db, 'clientes_direcciones')
->fields(
Field::inst('att')
->validator('Validate::notEmpty', array(
'message' => lang('ClienteDirecciones.validation.required'))
)
->validator( Validate::maxLen( 100 ) , array(
'message' => lang('ClienteDirecciones.validation.max_length'))
),
)
/*->validator(function ($editor, $action, $data) {
if ($action === Editor::ACTION_CREATE || $action === Editor::ACTION_EDIT) {
foreach ($data['data'] as $pkey => $values) {
// Si no se quiere borrar...
if ($data['data'][$pkey]['is_deleted'] != 1) {
$process_data['paginas_min'] = $data['data'][$pkey]['paginas_min'];
$process_data['paginas_max'] = $data['data'][$pkey]['paginas_max'];
$response = $this->model->checkIntervals($process_data, $pkey, $data['data'][$pkey]['papel_impresion_id']);
// No se pueden duplicar valores al crear o al editar
if (!empty($response)) {
return $response;
}
}
}
}
})*/
->debug(true)
->process($_POST)
->data();
$newTokenHash = csrf_hash();
$csrfTokenName = csrf_token();
$response[$csrfTokenName] = $newTokenHash;
echo json_encode($response);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
}

View File

@ -265,7 +265,6 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController
$this->viewData['clienteList'] = $this->getClienteListItems($presupuestoEntity->cliente_id ?? null);
$this->viewData['incReiList'] = array('incidencia' => lang('Presupuestos.incidencia'), 'reimpresion' => lang('Presupuestos.reimpresion'), 'sin_cargo' => lang('Presupuestos.sinCargo'));
$this->viewData['paisList'] = $this->getPaisListItems();
$this->viewData['papelFormatoList'] = $this->getPapelFormatoListItems($presupuestoEntity->papel_formato_id ?? null);
$this->viewData['papelGenericoNegroList'] = $this->getPapelGenericoNegro();
$this->viewData['papelGenericoNegroHQList'] = $this->getPapelGenericoNegroHQ();

7
ci4/app/Entities/Clientes/ClienteDireccionesEntity.php Normal file → Executable file
View File

@ -8,13 +8,14 @@ class ClienteDireccionesEntity extends \CodeIgniter\Entity\Entity
protected $attributes = [
"id" => null,
"cliente_id" => null,
"alias" => null,
"att" => null,
"email" => null,
"direccion" => null,
"pais_id" => null,
"ccaa_id" => null,
"provincia_id" => null,
"municipio_id" => null,
"provincia" => null,
"municipio" => null,
"cp" => null,
"telefono" => null,
];
@ -22,8 +23,6 @@ class ClienteDireccionesEntity extends \CodeIgniter\Entity\Entity
"cliente_id" => "int",
"pais_id" => "int",
"ccaa_id" => "int",
"provincia_id" => "int",
"municipio_id" => "int",
"cp" => "int",
];
}

View File

View File

8
ci4/app/Language/en/ClienteDirecciones.php Normal file → Executable file
View File

@ -3,6 +3,8 @@
return [
'nuevaTitle' => 'New address',
'alias' => 'Alias',
'att' => 'Attn.',
'email' => 'Email',
'direccion' => 'Address',
@ -13,8 +15,12 @@ return [
'pais' => 'Country',
'telefono' => 'Phone',
'validation' => [
'max_length' => 'The {field} field cannot exceed {param} characters in length.',
'max_length' => 'Max. length ',
'required' => 'Field required'
'valid_email' => 'The email is not valid',
],
'selectPais' => 'Select a country',
];

10
ci4/app/Language/es/ClienteDirecciones.php Normal file → Executable file
View File

@ -3,6 +3,8 @@
return [
'nuevaTitle' => 'Añadir nueva dirección',
'alias' => 'Alias',
'att' => 'Att.',
'email' => 'Email',
'direccion' => 'Direccion',
@ -13,7 +15,13 @@ return [
'pais' => 'País',
'telefono' => 'Teléfono',
'validation' => [
'max_length' => 'El campo {field} no puede exceder los {param} caracteres de longitud.',
'max_length' => 'Max. valor caracteres alcanzado',
'required' => 'Campo obligatorio',
'valid_email' => 'El email introducido no es válido',
],
'selectPais' => 'Seleccione País',
'selectCcaa' => 'Seleccione CCAA',
'selectProvincia' => 'Seleccione Provincia',
'selectMunicipio' => 'Seleccione Municipio',
];

38
ci4/app/Models/Clientes/ClienteDireccionesModel.php Normal file → Executable file
View File

@ -14,25 +14,27 @@ class ClienteDireccionesModel extends \App\Models\GoBaseModel
protected $useAutoIncrement = true;
const SORTABLE = [
0 => "t1.att",
1 => "t1.email",
2 => "t1.direccion",
3 => "t1.cp",
4 => "t5.municipio_nombre",
5 => "t4.nombre",
6 => "t3.nombre",
7 => "t1.telefono",
0 => "t1.alias",
1 => "t1.att",
2 => "t1.email",
3 => "t1.direccion",
4 => "t1.cp",
5 => "t5.municipio_nombre",
6 => "t4.nombre",
7 => "t3.nombre",
8 => "t1.telefono",
];
protected $allowedFields = [
"alias",
"cliente_id",
"att",
"email",
"direccion",
"pais_id",
"ccaa_id",
"provincia_id",
"municipio_id",
"provincia",
"municipio",
"cp",
"telefono",
];
@ -46,6 +48,10 @@ class ClienteDireccionesModel extends \App\Models\GoBaseModel
"label" => "ClienteDirecciones.att",
"rules" => "trim|max_length[100]",
],
"alias" => [
"label" => "ClienteDirecciones.att",
"rules" => "trim|max_length[100]",
],
"email" => [
"label" => "ClienteDirecciones.email",
"rules" => "trim|max_length[100]|valid_email",
@ -64,6 +70,9 @@ class ClienteDireccionesModel extends \App\Models\GoBaseModel
"att" => [
"max_length" => "ClienteDirecciones.validation.max_length",
],
"alias" => [
"max_length" => "ClienteDirecciones.validation.max_length",
],
"email" => [
"max_length" => "ClienteDirecciones.validation.max_length",
],
@ -89,17 +98,17 @@ class ClienteDireccionesModel extends \App\Models\GoBaseModel
$builder = $this->db
->table($this->table . " t1")
->select(
"t1.id AS id, t1.cliente_id AS cliente_id, t2.nombre as cliente_nombre, t1.att AS att,
"t1.id AS id, t1.cliente_id AS cliente_id, t2.nombre as cliente_nombre, t1.att AS att, t1.alias AS alias,
t1.email AS email, t1.direccion AS direccion, t1.pais_id AS pais_id, t3.nombre AS pais,
t1.ccaa_id AS ccaa_id, t4.nombre AS ccaa_nombre,
t1.municipio_id AS municipio_id, t5.municipio_nombre AS municipio_nombre, t1.cp AS cp, t1.telefono AS telefono"
t1.municipio AS municipio, t1.provincia AS provincia, t1.cp AS cp, t1.telefono AS telefono"
);
$builder->where('t1.cliente_id', $cliente_id);
$builder->join("clientes t2", "t1.cliente_id = t2.id", "left");
$builder->join("lg_paises t3", "t1.pais_id = t3.id", "left");
$builder->join("lg_comunidades_autonomas t4", "t1.ccaa_id = t4.id", "left");
$builder->join("municipios t5", "t1.municipio_id = t5.id", "left");
return empty($search)
? $builder
@ -110,7 +119,8 @@ class ClienteDireccionesModel extends \App\Models\GoBaseModel
->orLike("t1.direccion", $search)
->orLike("t3.nombre", $search)
->orLike("t4.nombre", $search)
->orLike("t5.municipio_nombre", $search)
->orLike("t1.municipio", $search)
->orLike("t1.provincia", $search)
->orLike("t1.cp", $search)
->orLike("t1.telefono", $search)
->groupEnd();

View File

@ -93,7 +93,7 @@ class ClienteModel extends \App\Models\GoBaseModel
],
"comentarios_tirada_flexible" => [
"label" => "Clientes.comentariosTiradaFlexible",
"rules" => "trim|required|max_length[16313]",
"rules" => "trim|max_length[16313]",
],
"cp" => [
"label" => "Clientes.cp",
@ -119,22 +119,10 @@ class ClienteModel extends \App\Models\GoBaseModel
"label" => "Clientes.fechaVencimiento",
"rules" => "trim|max_length[100]",
],
"is_deleted" => [
"label" => "Clientes.isDeleted",
"rules" => "required|integer",
],
"limite_credito" => [
"label" => "Clientes.limiteCredito",
"rules" => "required|decimal",
],
"limite_credito_change_at" => [
"label" => "Clientes.limiteCreditoChangeAt",
"rules" => "required|valid_date",
],
"limite_credito_user_id" => [
"label" => "Clientes.limiteCreditoUserId",
"rules" => "required|integer",
],
"margen" => [
"label" => "Clientes.margen",
"rules" => "required|decimal",
@ -155,14 +143,6 @@ class ClienteModel extends \App\Models\GoBaseModel
"label" => "Clientes.telefono",
"rules" => "trim|max_length[60]",
],
"user_created_id" => [
"label" => "Clientes.userCreatedId",
"rules" => "required|integer",
],
"user_update_id" => [
"label" => "Clientes.userUpdateId",
"rules" => "required|integer",
],
"vencimiento" => [
"label" => "Clientes.vencimiento",
"rules" => "required|integer",

View File

@ -1,7 +1,171 @@
<div id="direccionesForm">
<fieldset class="att">
<legend>Att</legend>
<editor-field name="att"></editor-field>
</fieldset>
<div id="createNewAddress" class="modal fade addModal">
<div class="modal-dialog modal-lg modal-simple">
<div class="modal-content">
<div class="modal-header">
<h4 id="labelTitleConfirmDialog" class="modal-title"><?= lang('ClienteDirecciones.nuevaTitle') ?></h4>
</div>
<div class="modal-body">
<div class="mb-3">
<label for="add_alias" class="form-label">
<?= lang('ClienteDirecciones.alias') ?>*
</label>
<input type="text" id="add_alias" tabindex="1" maxLength="100" class="form-control">
</div><!--//.mb-3 -->
<div class="mb-3">
<label for="add_att" class="form-label">
<?= lang('ClienteDirecciones.att') ?>*
</label>
<input type="text" id="add_att" tabindex="1" maxLength="100" class="form-control">
</div><!--//.mb-3 -->
<div class="mb-3">
<label for="add_email" class="form-label">
<?= lang('ClienteDirecciones.email') ?>*
</label>
<input type="text" id="add_email" tabindex="2" maxLength="100" class="form-control">
</div><!--//.mb-3 -->
<div class="mb-3">
<label for="add_direccion" class="form-label">
<?= lang('ClienteDirecciones.direccion') ?>*
</label>
<input type="text" id="add_direccion" tabindex="3" maxLength="255" class="form-control">
</div><!--//.mb-3 -->
<div class='row'>
<div id='divPais' class="col-md-12 col-lg-12 pl-4">
<div class="mb-3">
<label for="add_paisId" class="form-label">
<?=lang('ClienteDirecciones.pais') ?>*
</label>
<select id="add_paisId" tabindex="4" class="form-control select2bs" style="width: 100%;" >
<option value="" disabled selected><?=lang('ClienteDirecciones.selectPais') ?></option>
<?php foreach ($paisList as $item) : ?>
<option value="<?=$item->id ?>">
<?=$item->nombre ?>
</option>
<?php endforeach; ?>
</select>
</div><!--//.mb-3 -->
</div>
<div class="col-md-12 col-lg-6 pl-4 spain-data" style="display: none;">
<div class="mb-3">
<label for="add_ccaa" class="form-label">
<?=lang('ClienteDirecciones.ccaa') ?>*
</label>
<select id="add_ccaa" tabindex="5" class="form-control select2bs" style="width: 100%;" >
</select>
</div><!--//.mb-3 -->
</div>
</div> <!-- //.row -->
<div class='row'>
<div id='divMunicipio' class="col-md-12 col-lg-12 pl-4">
<div class="mb-3">
<label for="add_municipio" class="form-label">
<?=lang('ClienteDirecciones.municipio') ?>*
</label>
<input type="text" id="add_municipio" tabindex="6" maxLength="100" class="form-control">
</div><!--//.mb-3 -->
</div>
<div class="col-md-12 col-lg-6 pl-4 spain-data" style="display: none;">
<div class="mb-3">
<label for="add_provincia" class="form-label">
<?=lang('ClienteDirecciones.provincia') ?>*
</label>
<input type="text" id="add_provincia" tabindex="7" maxLength="100" class="form-control">
</div><!--//.mb-3 -->
</div>
</div> <!-- //.row -->
<div class='row'>
<div class="col-md-12 col-lg-6 pl-4">
<div class="mb-3">
<label for="add_cp" class="form-label">
<?=lang('ClienteDirecciones.cp') ?>*
</label>
<input type="text" id="add_cp" tabindex="8" maxLength="100" class="form-control">
</div><!--//.mb-3 -->
</div>
<div class="col-md-12 col-lg-6 pl-4">
<div class="mb-3">
<label for="add_telefono" class="form-label">
<?=lang('ClienteDirecciones.telefono') ?>*
</label>
<input type="text" id="add_telefono" tabindex="9" maxLength="100" class="form-control"></input>
</div><!--//.mb-3 -->
</div>
</div> <!-- //.row -->
</div>
<div class="modal-footer">
<button id="saveAdd"
type="button"
class="btn btn-primary"
>Guardar</button>
<button id="cancelAdd"
type="button"
class="btn btn-default"
>Cancelar</button>
</div>
</div>
</div>
</div>
<?= $this->section("additionalInlineJs") ?>
$('#cancelAdd').on('click', function(){
$('#createNewAddress').modal("hide");
})
$('#saveAdd').on('click', function(){
editorAddress
.create( false )
.set( 'alias', $('#add_alias').val() )
.set( 'att', $('#add_att').val() )
.submit();
})
$('#add_paisId').on('change', function(){
var nombre_pais = $("#add_paisId option:selected" ).text().trim();
if(nombre_pais.localeCompare('España')==0){
$('#divPais').removeClass('col-lg-12').addClass('col-lg-6')
$('#divMunicipio').removeClass('col-lg-12').addClass('col-lg-6')
$('.spain-data').css('display', 'inline')
}
else{
$('.spain-data').css('display', 'none')
$('#divPais').removeClass('col-lg-6').addClass('col-lg-12')
$('#divMunicipio').removeClass('col-lg-6').addClass('col-lg-12')
}
})
// clear modal items when close
$('#createNewAddress').on('hidden.bs.modal', function () {
$('#add_alias').val("")
$('#add_att').val("")
$('#add_email').val("")
$('#add_direccion').val("")
$("#add_paisId").val("").change()
$("#add_ccaa").val("").change()
$('#add_municipio').val("")
$('#add_provincia').val("")
$('#add_cp').val("")
$('#add_telefono').val("")
})
<?=$this->endSection() ?>

View File

@ -145,20 +145,14 @@
<label for="paisId" class="form-label">
<?= lang('Clientes.paisId') ?>
</label>
<select
id="paisId"
name="pais_id"
class="form-control select2"
style="width: 100%;"
>
<?php if (isset($paisList) && is_array($paisList) && !empty($paisList)) :
foreach ($paisList as $k => $v) : ?>
<option value="<?= $k ?>"<?= $k == $clienteEntity->pais_id ? ' selected' : '' ?>>
<?= $v ?>
<select id="paisId" name="pais_id" class="form-control select2bs" style="width: 100%;" >
<?php foreach ($paisList as $item) : ?>
<option value="<?=$item->id ?>"<?=$item->id==$clienteEntity->pais_id ? ' selected':'' ?>>
<?=$item->nombre ?>
</option>
<?php endforeach;
endif; ?>
<?php endforeach; ?>
</select>
</div>
<div class="col-md-4">
<label for="comunidadAutonomaId" class="form-label">
@ -584,6 +578,7 @@
<table id="tableOfDireccionesEnvio" class="table dt-responsive dataTable" style="width: 100%;">
<thead>
<tr>
<th><?= lang('ClienteDirecciones.alias') ?></th>
<th><?= lang('ClienteDirecciones.att') ?></th>
<th><?= lang('ClienteDirecciones.email') ?></th>
<th><?= lang('ClienteDirecciones.direccion') ?></th>
@ -829,7 +824,7 @@
/****************************************
Direcciones cliente
*****************************************/
const editor2 = new DataTable.Editor({
const editorAddress = new DataTable.Editor({
ajax: {
url: "<?= route_to('editorOfClienteDirecciones') ?>",
headers: {
@ -839,6 +834,8 @@ const editor2 = new DataTable.Editor({
table : "#tableOfDireccionesEnvio",
idSrc: 'id',
fields: [ {
name: "alias"
}, {
name: "att"
}, {
name: "email"
@ -864,6 +861,16 @@ const editor2 = new DataTable.Editor({
template: '#direccionesForm'
});
editorAddress.on( 'postSubmit', function ( e, json, data, action ) {
if (action === 'create') {
if(json.fieldErrors.length > 0){
json.fieldErrors.forEach((error) => {
$('#add_' + error.name).after("<p class='error_in_form_text'>" + error.status + '</p>')
})
}
}
})
const lastColNr2 = $('#tableOfDireccionesEnvio').find("tr:first th").length - 1;
var tableDirecciones = $('#tableOfDireccionesEnvio').DataTable( {
@ -889,6 +896,7 @@ var tableDirecciones = $('#tableOfDireccionesEnvio').DataTable( {
async: true,
}),
columns: [
{ 'data': 'alias' },
{ 'data': 'att' },
{ 'data': 'email' },
{ 'data': 'direccion' },
@ -917,20 +925,34 @@ var tableDirecciones = $('#tableOfDireccionesEnvio').DataTable( {
},
buttons: [ {
className: 'btn btn-primary float-end me-sm-3 me-1',
extend: "create",
editor: editor2,
formOptions: {
submitTrigger: -1,
submitHtml: '<i class="ti ti-device-floppy"/>'
text: "<?= lang('Basic.global.addNew'); ?>",
action: function ( e, dt, node, config ) {
var $newAddDialog = $("#createNewAddress");
$newAddDialog.modal('show');
$("#btnYesConfirmDialog").off('click').click(function () {
$newAddDialog.modal("hide");
});
$("#btnNoConfirmDialog").off('click').click(function () {
$newAddDialog.modal("hide");
});
}
} ]
} );
<?=$this->endSection() ?>
<?=$this->section('css') ?>
<link rel="stylesheet" href="<?= site_url('themes/vuexy/css/datatables-editor/editor.dataTables.min.css') ?>">
<link rel="stylesheet" href="<?= site_url('themes/vuexy/css/datatables-editor/editor.bootstrap5.min.css') ?>">
<link rel="stylesheet" href="https://cdn.datatables.net/buttons/2.2.3/css/buttons.bootstrap5.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.6/css/dataTables.bootstrap5.min.css">
<?=$this->endSection() ?>
<?= $this->section('additionalExternalJs') ?>

View File

@ -22,6 +22,7 @@
type="submit"
class="btn btn-primary float-start me-sm-3 me-1"
name="save"
id="saveForm"
value="<?= lang("Basic.global.Save") ?>"
>
<?= anchor(route_to("clienteList"), lang("Basic.global.Cancel"), ["class" => "btn btn-secondary float-start"]) ?>
@ -34,6 +35,19 @@
<?= $this->section("additionalInlineJs") ?>
$(document).keypress(function (e) {
var key = e.which;
if(key == 13) // the enter key code
{ e.preventDefault()
if($('#createNewAddress').hasClass('show')){
$("#saveAdd").click();
}else{
$('#saveForm').click();
}
}
});
$('#soporteId').select2({
allowClear: false,
@ -211,3 +225,11 @@
<?= $this->endSection() ?>
<?=$this->section('css') ?>
<link rel="stylesheet" href="<?= site_url('themes/vuexy/css/datatables-editor/editor.dataTables.min.css') ?>">
<link rel="stylesheet" href="https://cdn.datatables.net/buttons/2.2.3/css/buttons.bootstrap5.min.css">
<link rel="stylesheet" href="<?= site_url('themes/vuexy/css/sk-datatables.css') ?>">
<?=$this->endSection() ?>

View File

@ -114,3 +114,10 @@
text-align: center;
margin-top: 1rem;
}
.error_in_form_text{
font-size: 11px;
padding: 0;
color: #b11f1f;
}