mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
Merge branch 'feat/iskn_presupuestos' into 'main'
Feat/iskn presupuestos See merge request jjimenez/safekat!892
This commit is contained in:
@ -587,6 +587,7 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController
|
|||||||
$data['datosGenerales']['coleccion'] = $presupuesto->coleccion;
|
$data['datosGenerales']['coleccion'] = $presupuesto->coleccion;
|
||||||
$data['datosGenerales']['numero_edicion'] = $presupuesto->numero_edicion;
|
$data['datosGenerales']['numero_edicion'] = $presupuesto->numero_edicion;
|
||||||
$data['datosGenerales']['isbn'] = $presupuesto->isbn;
|
$data['datosGenerales']['isbn'] = $presupuesto->isbn;
|
||||||
|
$data['datosGenerales']['iskn'] = $presupuesto->iskn;
|
||||||
$data['datosGenerales']['pais'] = $presupuesto->pais_id;
|
$data['datosGenerales']['pais'] = $presupuesto->pais_id;
|
||||||
$data['datosGenerales']['pais_nombre'] = model('App\Models\Configuracion\PaisModel')->find($presupuesto->pais_id)->nombre;
|
$data['datosGenerales']['pais_nombre'] = model('App\Models\Configuracion\PaisModel')->find($presupuesto->pais_id)->nombre;
|
||||||
$data['datosGenerales']['cliente']['id'] = $presupuesto->cliente_id;
|
$data['datosGenerales']['cliente']['id'] = $presupuesto->cliente_id;
|
||||||
|
|||||||
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Database\Migrations;
|
||||||
|
|
||||||
|
use CodeIgniter\Database\Migration;
|
||||||
|
|
||||||
|
class AddIsknToPresupuestos extends Migration
|
||||||
|
{
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
$this->forge->addColumn('presupuestos', [
|
||||||
|
'iskn' => [
|
||||||
|
'type' => 'VARCHAR',
|
||||||
|
'constraint' => 64,
|
||||||
|
'null' => true,
|
||||||
|
'default' => null,
|
||||||
|
'after' => 'coleccion', // o cualquier campo existente tras el cual quieras insertarlo
|
||||||
|
'collation' => 'utf8_unicode_ci',
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
$this->forge->dropColumn('presupuestos', 'iskn');
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -47,6 +47,7 @@ class PresupuestoEntity extends \CodeIgniter\Entity\Entity
|
|||||||
"titulo" => "",
|
"titulo" => "",
|
||||||
"autor" => null,
|
"autor" => null,
|
||||||
"coleccion" => null,
|
"coleccion" => null,
|
||||||
|
"iskn" => null,
|
||||||
"numero_edicion" => null,
|
"numero_edicion" => null,
|
||||||
"isbn" => null,
|
"isbn" => null,
|
||||||
"referencia_cliente" => null,
|
"referencia_cliente" => null,
|
||||||
|
|||||||
@ -35,6 +35,7 @@ return [
|
|||||||
'coleccion' => 'Collection',
|
'coleccion' => 'Collection',
|
||||||
'numeroEdicion' => 'Edition number',
|
'numeroEdicion' => 'Edition number',
|
||||||
'isbn' => 'ISBN',
|
'isbn' => 'ISBN',
|
||||||
|
'iskn' => 'Identificador ISKN',
|
||||||
'referenciaCliente' => 'Customer reference',
|
'referenciaCliente' => 'Customer reference',
|
||||||
'formatoLibro' => "Book format",
|
'formatoLibro' => "Book format",
|
||||||
'papelFormatoId' => "Size",
|
'papelFormatoId' => "Size",
|
||||||
|
|||||||
@ -67,6 +67,7 @@ class PresupuestoModel extends \App\Models\BaseModel
|
|||||||
"titulo",
|
"titulo",
|
||||||
"autor",
|
"autor",
|
||||||
"coleccion",
|
"coleccion",
|
||||||
|
"iskn",
|
||||||
"numero_edicion",
|
"numero_edicion",
|
||||||
"isbn",
|
"isbn",
|
||||||
"referencia_cliente",
|
"referencia_cliente",
|
||||||
@ -139,7 +140,7 @@ class PresupuestoModel extends \App\Models\BaseModel
|
|||||||
'lomo_redondo',
|
'lomo_redondo',
|
||||||
'cabezada',
|
'cabezada',
|
||||||
'envio_base',
|
'envio_base',
|
||||||
'direcciones_fp_checks',
|
'direcciones_fp_checks',
|
||||||
];
|
];
|
||||||
protected $returnType = "App\Entities\Presupuestos\PresupuestoEntity";
|
protected $returnType = "App\Entities\Presupuestos\PresupuestoEntity";
|
||||||
|
|
||||||
@ -401,15 +402,27 @@ class PresupuestoModel extends \App\Models\BaseModel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function confirmarPresupuesto($presupuesto_id)
|
/**
|
||||||
|
* Confirma un presupuesto (cambia su estado a 'confirmado') y,
|
||||||
|
* si no tiene asignado un ISKN, lo genera y lo asigna automáticamente.
|
||||||
|
*
|
||||||
|
* @param int $presupuesto_id ID del presupuesto a confirmar.
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function confirmarPresupuesto($presupuesto_id)
|
||||||
{
|
{
|
||||||
|
// Cambiar el estado del presupuesto a '2' (confirmado)
|
||||||
$this->db
|
$this->db
|
||||||
->table($this->table . " t1")
|
->table($this->table . " t1")
|
||||||
->where('t1.id', $presupuesto_id)
|
->where('t1.id', $presupuesto_id)
|
||||||
->set('t1.estado_id', 2)
|
->set('t1.estado_id', 2)
|
||||||
->update();
|
->update();
|
||||||
|
|
||||||
|
// Si existe y aún no tiene ISKN asignado, lo generamos y asignamos
|
||||||
|
$this->asignarIskn($presupuesto_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function insertarPresupuestoCliente($id, $tirada, $data, $data_cabecera, $extra_info, $resumen_totales, $iva_reducido, $excluir_rotativa, $tiradas_alternativas)
|
function insertarPresupuestoCliente($id, $tirada, $data, $data_cabecera, $extra_info, $resumen_totales, $iva_reducido, $excluir_rotativa, $tiradas_alternativas)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -501,8 +514,8 @@ class PresupuestoModel extends \App\Models\BaseModel
|
|||||||
|
|
||||||
'total_antes_descuento' => round(
|
'total_antes_descuento' => round(
|
||||||
$totalCostes + $totalMargenes +
|
$totalCostes + $totalMargenes +
|
||||||
$resumen_totales['coste_envio'] + $resumen_totales['margen_envio'] +
|
$resumen_totales['coste_envio'] + $resumen_totales['margen_envio'] +
|
||||||
$data['envio_base'],
|
$data['envio_base'],
|
||||||
2
|
2
|
||||||
),
|
),
|
||||||
'total_descuento' => 0,
|
'total_descuento' => 0,
|
||||||
@ -511,25 +524,25 @@ class PresupuestoModel extends \App\Models\BaseModel
|
|||||||
'total_precio_unidad' => $resumen_totales['precio_unidad'],
|
'total_precio_unidad' => $resumen_totales['precio_unidad'],
|
||||||
'total_presupuesto' => round(
|
'total_presupuesto' => round(
|
||||||
$totalCostes + $totalMargenes +
|
$totalCostes + $totalMargenes +
|
||||||
$resumen_totales['coste_envio'] + $resumen_totales['margen_envio'] +
|
$resumen_totales['coste_envio'] + $resumen_totales['margen_envio'] +
|
||||||
$data['envio_base'],
|
$data['envio_base'],
|
||||||
2
|
2
|
||||||
),
|
),
|
||||||
'total_aceptado' => round(
|
'total_aceptado' => round(
|
||||||
$totalCostes + $totalMargenes +
|
$totalCostes + $totalMargenes +
|
||||||
$resumen_totales['coste_envio'] + $resumen_totales['margen_envio'] +
|
$resumen_totales['coste_envio'] + $resumen_totales['margen_envio'] +
|
||||||
$data['envio_base'],
|
$data['envio_base'],
|
||||||
2
|
2
|
||||||
),
|
),
|
||||||
|
|
||||||
'total_factor' => round(
|
'total_factor' => round(
|
||||||
($totalCostes + $totalMargenes) /
|
($totalCostes + $totalMargenes) /
|
||||||
$resumen_totales['sumForFactor'],
|
$resumen_totales['sumForFactor'],
|
||||||
2
|
2
|
||||||
),
|
),
|
||||||
'total_factor_ponderado' => round(
|
'total_factor_ponderado' => round(
|
||||||
($totalCostes + $totalMargenes) /
|
($totalCostes + $totalMargenes) /
|
||||||
$resumen_totales['sumForFactorPonderado'],
|
$resumen_totales['sumForFactorPonderado'],
|
||||||
2
|
2
|
||||||
),
|
),
|
||||||
|
|
||||||
@ -635,7 +648,6 @@ class PresupuestoModel extends \App\Models\BaseModel
|
|||||||
'gramaje' => intval($data['faja']['gramaje']),
|
'gramaje' => intval($data['faja']['gramaje']),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
$json = json_encode($values);
|
$json = json_encode($values);
|
||||||
return $json;
|
return $json;
|
||||||
@ -915,5 +927,19 @@ class PresupuestoModel extends \App\Models\BaseModel
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function asignarIskn(int $presupuesto_id): bool
|
||||||
|
{
|
||||||
|
$presupuesto = $this->find($presupuesto_id);
|
||||||
|
|
||||||
|
// Si no existe o ya tiene ISKN, no lo modificamos
|
||||||
|
if (!$presupuesto || !empty($presupuesto->iskn)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->update($presupuesto_id, [
|
||||||
|
'iskn' => model('App\Models\Catalogo\IdentificadorIsknModel')->newIskn(),
|
||||||
|
'updated_at' => date('Y-m-d H:i:s'),
|
||||||
|
'user_update_id' => auth()->id(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -25,7 +25,7 @@
|
|||||||
<label for="created_at" class="form-label">
|
<label for="created_at" class="form-label">
|
||||||
<?= lang('Presupuestos.created_at') ?>
|
<?= lang('Presupuestos.created_at') ?>
|
||||||
</label>
|
</label>
|
||||||
<?php if(str_contains($formAction,'edit')): ?>
|
<?php if (str_contains($formAction, 'edit')): ?>
|
||||||
<input readonly style="background: #E8E8E8;" id="updated_at" name="updated_at" maxLength="12" class="form-control" value="">
|
<input readonly style="background: #E8E8E8;" id="updated_at" name="updated_at" maxLength="12" class="form-control" value="">
|
||||||
<?php else: ?>
|
<?php else: ?>
|
||||||
<input readonly style="background: #E8E8E8;" id="created_at" name="created_at" maxLength="12" class="form-control" value="">
|
<input readonly style="background: #E8E8E8;" id="created_at" name="created_at" maxLength="12" class="form-control" value="">
|
||||||
@ -39,12 +39,12 @@
|
|||||||
<?= lang('Presupuestos.presupuestoEstado') ?>
|
<?= lang('Presupuestos.presupuestoEstado') ?>
|
||||||
</label>
|
</label>
|
||||||
<select disabled id="estado_id" name="estado_id" maxLength="11" style="background-color: #E8E8E8;" class="form-control select2bs" value="">
|
<select disabled id="estado_id" name="estado_id" maxLength="11" style="background-color: #E8E8E8;" class="form-control select2bs" value="">
|
||||||
<option value=1 >
|
<option value=1>
|
||||||
<?=lang('Presupuestos.presupuestoEstadoBorrador') ?>
|
<?= lang('Presupuestos.presupuestoEstadoBorrador') ?>
|
||||||
</option>
|
</option>
|
||||||
<option value=2 >
|
<option value=2>
|
||||||
<?=lang('Presupuestos.presupuestoEstadoAceptado') ?>
|
<?= lang('Presupuestos.presupuestoEstadoAceptado') ?>
|
||||||
</option>
|
</option>
|
||||||
</select>
|
</select>
|
||||||
</div><!--//.mb-3 -->
|
</div><!--//.mb-3 -->
|
||||||
</div><!--//.col -->
|
</div><!--//.col -->
|
||||||
@ -71,7 +71,7 @@
|
|||||||
<div class="col-md-12 col-lg-6 px-4">
|
<div class="col-md-12 col-lg-6 px-4">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="titulo" class="form-label">
|
<label for="titulo" class="form-label">
|
||||||
<?=lang('Presupuestos.titulo') ?>*
|
<?= lang('Presupuestos.titulo') ?>*
|
||||||
</label>
|
</label>
|
||||||
<input type="text" id="titulo" name="titulo" maxLength="300" class="form-control" value="">
|
<input type="text" id="titulo" name="titulo" maxLength="300" class="form-control" value="">
|
||||||
</div><!--//.mb-3 -->
|
</div><!--//.mb-3 -->
|
||||||
@ -81,7 +81,7 @@
|
|||||||
<div class="col-md-12 col-lg-6 px-4">
|
<div class="col-md-12 col-lg-6 px-4">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="autor" class="form-label">
|
<label for="autor" class="form-label">
|
||||||
<?=lang('Presupuestos.autor') ?>
|
<?= lang('Presupuestos.autor') ?>
|
||||||
</label>
|
</label>
|
||||||
<input type="text" id="autor" name="autor" maxLength="150" class="form-control" value="">
|
<input type="text" id="autor" name="autor" maxLength="150" class="form-control" value="">
|
||||||
</div><!--//.mb-3 -->
|
</div><!--//.mb-3 -->
|
||||||
@ -95,37 +95,37 @@
|
|||||||
<div class="col-md-12 col-lg-3 px-4">
|
<div class="col-md-12 col-lg-3 px-4">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="coleccion" class="form-label">
|
<label for="coleccion" class="form-label">
|
||||||
<?=lang('Presupuestos.coleccion') ?>
|
<?= lang('Presupuestos.coleccion') ?>
|
||||||
</label>
|
</label>
|
||||||
<input type="text" id="coleccion" name="coleccion" maxLength="255" class="form-control" value="">
|
<input type="text" id="coleccion" name="coleccion" maxLength="255" class="form-control" value="">
|
||||||
</div><!--//.mb-3 -->
|
</div><!--//.mb-3 -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-12 col-lg-3 px-4">
|
<div class="col-md-12 col-lg-3 px-4">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="numeroEdicion" class="form-label">
|
<label for="numeroEdicion" class="form-label">
|
||||||
<?=lang('Presupuestos.numeroEdicion') ?>
|
<?= lang('Presupuestos.numeroEdicion') ?>
|
||||||
</label>
|
</label>
|
||||||
<input type="text" id="numeroEdicion" name="numero_edicion" maxLength="50" class="form-control" value="">
|
<input type="text" id="numeroEdicion" name="numero_edicion" maxLength="50" class="form-control" value="">
|
||||||
</div><!--//.mb-3 -->
|
</div><!--//.mb-3 -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-12 col-lg-3 px-4">
|
<div class="col-md-12 col-lg-3 px-4">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="isbn" class="form-label">
|
<label for="isbn" class="form-label">
|
||||||
<?=lang('Presupuestos.isbn') ?>
|
<?= lang('Presupuestos.isbn') ?>
|
||||||
</label>
|
</label>
|
||||||
<input type="text" id="isbn" name="isbn" maxLength="50" class="form-control" value="">
|
<input type="text" id="isbn" name="isbn" maxLength="50" class="form-control" value="">
|
||||||
</div><!--//.mb-3 -->
|
</div><!--//.mb-3 -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-md-12 col-lg-3 px-4">
|
<div class="col-md-12 col-lg-3 px-4">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="paisId" class="form-label">
|
<label for="paisId" class="form-label">
|
||||||
<?=lang('Presupuestos.paisId') ?>
|
<?= lang('Presupuestos.paisId') ?>
|
||||||
</label>
|
</label>
|
||||||
<select id="paisId" name="pais_id" class="form-control select2bs" style="width: 100%;" >
|
<select id="paisId" name="pais_id" class="form-control select2bs" style="width: 100%;">
|
||||||
<?php if(isset($pais_default)): ?>
|
<?php if (isset($pais_default)): ?>
|
||||||
<option value="<?= $pais_default_id ?>" selected>
|
<option value="<?= $pais_default_id ?>" selected>
|
||||||
<?= $pais_default ?>
|
<?= $pais_default ?>
|
||||||
</option>
|
</option>
|
||||||
@ -133,31 +133,43 @@
|
|||||||
</select>
|
</select>
|
||||||
</div><!--//.mb-3 -->
|
</div><!--//.mb-3 -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div> <!--//.row -->
|
</div> <!--//.row -->
|
||||||
|
|
||||||
|
|
||||||
<!-- Fila 3 -->
|
<!-- Fila 4 -->
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12 col-lg-6 px-4">
|
<div class="col-md-12 col-lg-6 px-4">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="clienteId" class="form-label">
|
<label for="clienteId" class="form-label">
|
||||||
<?= lang('Presupuestos.clienteId') ?>*
|
<?= lang('Presupuestos.clienteId') ?>*
|
||||||
<?php if(isset($cliente_id)):?>
|
<?php if (isset($cliente_id)): ?>
|
||||||
<a href="<?= route_to('editarCliente', $cliente_id); ?>" target="_blank" ><i class="ti ti-file-search ti-sm mx-2""></i></a>
|
<a href="<?= route_to('editarCliente', $cliente_id); ?>" target="_blank"><i class="ti ti-file-search ti-sm mx-2""></i></a>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</label>
|
</label>
|
||||||
<select id="clienteId" name="cliente_id" class="form-control select2bs2" style="width: 100%;">
|
<select id=" clienteId" name="cliente_id" class="form-control select2bs2" style="width: 100%;">
|
||||||
</select>
|
</select>
|
||||||
</div><!--//.mb-3 -->
|
</div><!--//.mb-3 -->
|
||||||
</div><!--//.col -->
|
</div><!--//.col -->
|
||||||
|
|
||||||
<div class="col-md-12 col-lg-6 px-4">
|
<div class="col-md-12 col-lg-3 px-4">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="referenciaCliente" class="form-label">
|
<label for="referenciaCliente" class="form-label">
|
||||||
<?=lang('Presupuestos.referenciaCliente') ?>
|
<?= lang('Presupuestos.referenciaCliente') ?>
|
||||||
</label>
|
</label>
|
||||||
<input type="text" id="referenciaCliente" name="referencia_cliente" maxLength="100" class="form-control" value="">
|
<input type="text" id="referenciaCliente" name="referencia_cliente" maxLength="100" class="form-control" value="">
|
||||||
|
</div><!--//.mb-3 -->
|
||||||
|
</div><!--//.col -->
|
||||||
|
|
||||||
|
|
||||||
|
<div class="col-md-12 col-lg-3 px-4">
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="iskn" class="form-label">
|
||||||
|
<?= lang('Presupuestos.iskn') ?>
|
||||||
|
</label>
|
||||||
|
<input type="text" id="iskn" name="iskn" class="form-control" readonly
|
||||||
|
value="" maxlength="64"
|
||||||
|
style="background: #E8E8E8;">
|
||||||
</div><!--//.mb-3 -->
|
</div><!--//.mb-3 -->
|
||||||
</div><!--//.col -->
|
</div><!--//.col -->
|
||||||
|
|
||||||
@ -167,4 +179,4 @@
|
|||||||
</div> <!-- //.accordion-body -->
|
</div> <!-- //.accordion-body -->
|
||||||
</div> <!-- //.accordion-collapse -->
|
</div> <!-- //.accordion-collapse -->
|
||||||
</div> <!-- //.accordion-item -->
|
</div> <!-- //.accordion-item -->
|
||||||
</div> <!-- //.accordion -->
|
</div> <!-- //.accordion -->
|
||||||
@ -234,6 +234,7 @@ class PresupuestoAdminEdit {
|
|||||||
titulo: this.datosGenerales.titulo.val(),
|
titulo: this.datosGenerales.titulo.val(),
|
||||||
autor: this.datosGenerales.autor.val(),
|
autor: this.datosGenerales.autor.val(),
|
||||||
isbn: this.datosGenerales.isbn.val(),
|
isbn: this.datosGenerales.isbn.val(),
|
||||||
|
iskn: this.datosGenerales.iskn.val(),
|
||||||
pais_id: this.datosGenerales.pais.getVal(),
|
pais_id: this.datosGenerales.pais.getVal(),
|
||||||
coleccion: this.datosGenerales.coleccion.val(),
|
coleccion: this.datosGenerales.coleccion.val(),
|
||||||
numero_edicion: this.datosGenerales.numeroEdicion.val(),
|
numero_edicion: this.datosGenerales.numeroEdicion.val(),
|
||||||
|
|||||||
@ -15,6 +15,7 @@ class DatosGenerales{
|
|||||||
this.coleccion = this.domItem.find('#coleccion');
|
this.coleccion = this.domItem.find('#coleccion');
|
||||||
this.numeroEdicion = this.domItem.find('#numeroEdicion');
|
this.numeroEdicion = this.domItem.find('#numeroEdicion');
|
||||||
this.isbn = this.domItem.find('#isbn');
|
this.isbn = this.domItem.find('#isbn');
|
||||||
|
this.iskn = this.domItem.find('#iskn');
|
||||||
|
|
||||||
|
|
||||||
this.cliente = new ClassSelect($('#clienteId'), '/clientes/cliente/getSelect2', 'Seleccione cliente');
|
this.cliente = new ClassSelect($('#clienteId'), '/clientes/cliente/getSelect2', 'Seleccione cliente');
|
||||||
@ -46,6 +47,7 @@ class DatosGenerales{
|
|||||||
this.coleccion.val(datos.coleccion);
|
this.coleccion.val(datos.coleccion);
|
||||||
this.numeroEdicion.val(datos.numero_edicion);
|
this.numeroEdicion.val(datos.numero_edicion);
|
||||||
this.isbn.val(datos.isbn);
|
this.isbn.val(datos.isbn);
|
||||||
|
this.iskn.val(datos.iskn);
|
||||||
|
|
||||||
|
|
||||||
this.cliente.setOption(datos.cliente.id, datos.cliente.nombre);
|
this.cliente.setOption(datos.cliente.id, datos.cliente.nombre);
|
||||||
|
|||||||
Reference in New Issue
Block a user