diff --git a/ci4/app/Controllers/Clientes/Clienteprecios.php b/ci4/app/Controllers/Clientes/Clienteprecios.php index a148c170..8c8dd087 100755 --- a/ci4/app/Controllers/Clientes/Clienteprecios.php +++ b/ci4/app/Controllers/Clientes/Clienteprecios.php @@ -63,6 +63,9 @@ class ClientePrecios extends \App\Controllers\GoBaseResourceController if($plantilla_id == -1){ $this->model->clean_plantilla_id($requestedId); } + else if($requestedId== -1){ // actualizar todos los clientes que usan una plantilla + $this->model->update_from_plantilla($plantilla_id); + } else{ $this->model->copy_from_plantilla($requestedId, $plantilla_id); } diff --git a/ci4/app/Controllers/Configuracion/Maquinastarifasimpresion.php b/ci4/app/Controllers/Configuracion/Maquinastarifasimpresion.php index ec16d602..60bec560 100755 --- a/ci4/app/Controllers/Configuracion/Maquinastarifasimpresion.php +++ b/ci4/app/Controllers/Configuracion/Maquinastarifasimpresion.php @@ -249,7 +249,7 @@ class Maquinastarifasimpresion extends \App\Controllers\GoBaseResourceController // Si no se quiere borrar... if ($data['data'][$pkey]['is_deleted'] != 1) { // Cubierta y sobrecubierta sólo pueden ser en color - if ($values['uso'] != 'interior' && $values['tipo'] != 'color') { + if ($values['uso'] != 'interior' && $values['tipo'] != 'colorhq') { return lang('MaquinasTarifasImpresions.validation.cubierta_sobrecubierta_color'); } diff --git a/ci4/app/Controllers/Presupuestos/Cosidotapablanda.php b/ci4/app/Controllers/Presupuestos/Cosidotapablanda.php index 74a3478d..77700dd7 100755 --- a/ci4/app/Controllers/Presupuestos/Cosidotapablanda.php +++ b/ci4/app/Controllers/Presupuestos/Cosidotapablanda.php @@ -21,6 +21,7 @@ use App\Services\PresupuestoService; use App\Models\Configuracion\PapelImpresionModel; use App\Models\Configuracion\MaquinaModel; use App\Models\Configuracion\MaquinasTarifasImpresionModel; +use App\Models\Clientes\ClientePreciosModel; use Exception; class Cosidotapablanda extends \App\Controllers\GoBaseResourceController @@ -432,12 +433,14 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController ]; $gramaje = $reqData['gramaje'] ?? 0; + + $cliente_id = $reqData['cliente_id'] ?? -1; if ($type=='interior') { - $resourceData = $this->getCompIntData($type, $datosPedido, $papel_generico, $gramaje, $isColor, $isHq); + $resourceData = $this->getCompIntData($type, $datosPedido, $papel_generico, $gramaje, $isColor, $isHq, $cliente_id); $newTokenHash = csrf_hash(); $csrfTokenName = csrf_token(); @@ -469,7 +472,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController array_push($datosTipolog, $data); } - $resourceData = $this->getCompIntRotData($datosPedido, $papel_generico, $gramaje, $paginas, $datosTipolog); + $resourceData = $this->getCompIntRotData($datosPedido, $papel_generico, $gramaje, $paginas, $cliente_id, $datosTipolog); $newTokenHash = csrf_hash(); $csrfTokenName = csrf_token(); @@ -480,12 +483,13 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController return $this->respond($data); } - else if ($type=='cubierta') { + else if ($type=='cubierta' || $type=='sobrecubierta') { $datosPedido->solapas = $reqData['solapas']; $datosPedido->solapas_ancho = $reqData['solapas_ancho']; - $resourceData = $this->getCompIntData($type, $datosPedido, $papel_generico, $gramaje, $isColor, $isHq); + // Cubierta y sobrecubierta siempre color HQ + $resourceData = $this->getCompIntData($type, $datosPedido, $papel_generico, $gramaje, $isColor, 1, $cliente_id); $newTokenHash = csrf_hash(); $csrfTokenName = csrf_token(); @@ -523,11 +527,6 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController $datos = $reqData['datos'] ?? null; $presupuesto_id = $reqData['presupuesto_id'] ?? -1; - /*foreach($datos as $key=>$linea){ - $datos[$key]['papel_id'] = $datos[$key]['papel_id'] ?? -1; - }*/ - - if($datos != null){ $this->updateLineasPresupuestoActivas($presupuesto_id, $datos); } @@ -554,7 +553,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController } - public function getCompIntData($uso, $datosPedido, $papel_generico, $gramaje, $isColor, $isHq) + public function getCompIntData($uso, $datosPedido, $papel_generico, $gramaje, $isColor, $isHq, $cliente_id) { $tipo = $isColor? ($isHq?'colorhq':'color'): ($isHq?'negrohq':'negro'); @@ -584,8 +583,6 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController 'rotativa' => 0, ); } - - // Se obtienen los papeles disponibles $papelimpresionmodel = new PapelImpresionModel(); @@ -616,6 +613,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController if(!is_float($tarifa)){ continue; } + $linea = PresupuestoService::getCostesLinea($uso, $datosPedido, $maquina, $papel, $opciones_papel, $tarifa); if(array_key_exists('error', $linea)) continue; @@ -634,13 +632,35 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController $linea['fields']['precio_click'], $maquina->velocidad); + $clientePreciosModel = new ClientePreciosModel(); + $config = (object)[ + "tipo" => $uso, + "tipo_maquina" => $maquina->is_tinta?'inkjet':'toner', + "tipo_impresion" => $tipo + ]; + $tiempo = PresupuestoService::getHorasMaquina( + $linea['fields']['precio_click_pedido'], + $linea['fields']['precio_click'], + $maquina->velocidad); + [$precio_hora, $margen_precio_hora] = $clientePreciosModel->get_precio_hora($cliente_id, $config, $tiempo); + + if(is_null($precio_hora)){ + continue; + } + + $linea['fields']['precio_hora'] = $precio_hora; + $linea['fields']['precio_hora_margen'] = $margen_precio_hora; + $linea['fields']['horas_maquina'] = $tiempo; + $linea['fields']['precio_impresion_horas'] = $precio_hora*$tiempo*1.0; + $linea['fields']['margen_impresion_horas'] = $precio_hora*$tiempo*1.0*$margen_precio_hora/100.0; + array_push($lineas, $linea); } } return $lineas; } - public function getCompIntRotData($datosPedido, $papel_generico, $gramaje, $paginas, $datosTipolog = null) + public function getCompIntRotData($datosPedido, $papel_generico, $gramaje, $paginas, $cliente_id, $datosTipolog = null) { $uso = 'interior'; @@ -771,9 +791,37 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController $linea['fields']['precio_click'], $maquina->velocidad); + + $clientePreciosModel = new ClientePreciosModel(); + $config = (object)[ + "tipo" => $uso, + "tipo_maquina" => 'inkjet', + "tipo_impresion" => $tipo + ]; + $tiempo = PresupuestoService::getHorasMaquina( + $linea['fields']['precio_click_pedido'], + $linea['fields']['precio_click'], + $maquina->velocidad); + [$precio_hora, $margen_precio_hora] = $clientePreciosModel->get_precio_hora($cliente_id, $config, $tiempo); + + if(is_null($precio_hora)){ + continue; + } + + $linea['fields']['precio_hora'] = $precio_hora; + $linea['fields']['precio_hora_margen'] = $margen_precio_hora; + $linea['fields']['horas_maquina'] = $tiempo; + $linea['fields']['precio_impresion_horas'] = $precio_hora*$tiempo*1.0; + $linea['fields']['margen_impresion_horas'] = $precio_hora*$tiempo*1.0*$margen_precio_hora/100.0; + // total linea rotativa - $linea['fields']['total_impresion'] = $linea['fields']['precio_pedido'] + $linea['fields']['precio_click_pedido'] + $linea['fields']['precio_tinta'] + - $linea['fields']['total_corte']; + //$linea['fields']['total_impresion'] = $linea['fields']['precio_pedido'] + $linea['fields']['precio_click_pedido'] + $linea['fields']['precio_tinta'] + + // $linea['fields']['total_corte']; + $linea['fields']['total_impresion'] = + $linea['fields']['precio_pedido'] + // papel + $linea['fields']['precio_impresion_horas'] + $linea['fields']['margen_impresion_horas'] + // horas de maquina + $linea['fields']['precio_tinta'] + // tinta + $linea['fields']['total_corte']; // corte array_push($lineas, $linea); } diff --git a/ci4/app/Controllers/Test.php b/ci4/app/Controllers/Test.php index c914cfa0..8a36a7c0 100755 --- a/ci4/app/Controllers/Test.php +++ b/ci4/app/Controllers/Test.php @@ -17,11 +17,20 @@ class Test extends BaseController public function index() { - + $model = model('App\Models\Clientes\ClientePreciosModel') ; echo '
';
- $model = model('App\Models\Configuracion\TipoPresupuestoModel');
- var_dump($model->get_isCosido(25));
+ var_dump($model->update_from_plantilla(5));
echo '';
+ /*
+ echo '';
+ $model = model('App\Models\Clientes\ClientePreciosModel');
+ $configuracion = (object)[
+ 'tipo' => 'interior',
+ 'tipo_maquina' => 'inkjet',
+ 'tipo_impresion' => 'color'
+ ];
+ var_dump($model->get_precio_hora(999,$configuracion, 1.5));
+ echo '';*/
}
diff --git a/ci4/app/Language/en/MaquinasTarifasImpresions.php b/ci4/app/Language/en/MaquinasTarifasImpresions.php
index 31f29370..67994c7f 100755
--- a/ci4/app/Language/en/MaquinasTarifasImpresions.php
+++ b/ci4/app/Language/en/MaquinasTarifasImpresions.php
@@ -30,7 +30,7 @@ return [
'bicolor' => 'Bicolor',
'validation' => [
'duplicated_uso_tipo' => "Duplicate line (the combination 'use' and 'type' already exists)",
- 'cubierta_sobrecubierta_color' => "Cover and dust jacket only allow 'color' type",
+ 'cubierta_sobrecubierta_color' => "Cover and dust jacket only allow 'color HQ' type",
'tipo' => [
'in_list' => 'The {field} field must be one of: {param}.',
'required' => 'Required field.',
diff --git a/ci4/app/Language/en/Presupuestos.php b/ci4/app/Language/en/Presupuestos.php
index ea54fe36..2b4b89f9 100755
--- a/ci4/app/Language/en/Presupuestos.php
+++ b/ci4/app/Language/en/Presupuestos.php
@@ -75,6 +75,8 @@ return [
'peso' => 'Weight',
'click' => 'Click',
'totalClicks' => 'Total clicks',
+ 'horas' => 'Machine hours',
+ 'precioImpresion' => 'Print price',
'precioPagNegro' => 'Pages black price',
'precioPagColor' => 'Pages color price',
'totalTinta' => 'Total ink',
diff --git a/ci4/app/Language/es/MaquinasTarifasImpresions.php b/ci4/app/Language/es/MaquinasTarifasImpresions.php
index 1fda1bb8..dcf2651d 100755
--- a/ci4/app/Language/es/MaquinasTarifasImpresions.php
+++ b/ci4/app/Language/es/MaquinasTarifasImpresions.php
@@ -30,7 +30,7 @@ return [
'bicolor' => 'Bicolor',
'validation' => [
'duplicated_uso_tipo' => "Línea duplicada (la combinación 'uso' y 'tipo' ya existe)",
- 'cubierta_sobrecubierta_color' => "Cubierta y sobrecubierta solo permiten tipo 'color'",
+ 'cubierta_sobrecubierta_color' => "Cubierta y sobrecubierta solo permiten tipo 'color HQ'",
'tipo' => [
'in_list' => 'El campo {field} debe contener uno de: {param}.',
'required' => 'Campo obligatorio.',
diff --git a/ci4/app/Language/es/Presupuestos.php b/ci4/app/Language/es/Presupuestos.php
index d5fe3128..9ed161c8 100755
--- a/ci4/app/Language/es/Presupuestos.php
+++ b/ci4/app/Language/es/Presupuestos.php
@@ -74,6 +74,8 @@ return [
'peso' => 'Peso',
'click' => 'Click',
'totalClicks' => 'Total clicks',
+ 'horas' => 'Horas máquina',
+ 'precioImpresion' => 'Precio impresión',
'precioPagNegro' => 'Precio pág. negro',
'precioPagColor' => 'Precio pág. color',
'totalTinta' => 'Total tinta',
diff --git a/ci4/app/Models/Clientes/ClientePreciosModel.php b/ci4/app/Models/Clientes/ClientePreciosModel.php
index ee83c460..efc2b7d0 100644
--- a/ci4/app/Models/Clientes/ClientePreciosModel.php
+++ b/ci4/app/Models/Clientes/ClientePreciosModel.php
@@ -129,10 +129,16 @@ class ClientePreciosModel extends \App\Models\GoBaseModel
function delete_values($cliente_id = 0){
+ $session = session();
+ $datetime = (new \CodeIgniter\I18n\Time("now"));
+ $date_value = $datetime->format('Y-m-d H:i:s');
+
$this->db
->table($this->table . " t1")
->where('cliente_id', $cliente_id)
->set('is_deleted', 1)
+ ->set('deleted_at', $date_value)
+ ->set('user_updated_id', $session->id_user)
->update();
}
@@ -158,14 +164,90 @@ class ClientePreciosModel extends \App\Models\GoBaseModel
->set('tipo_impresion', $value->tipo_impresion)
->set('tiempo_min', $value->tiempo_min)
->set('tiempo_max', $value->tiempo_max)
+ ->set('precio_hora', $value->precio_hora)
->set('margen', $value->margen)
->set('user_updated_id', $session->id_user)
->set('updated_at', $date_value)
+ ->set('user_created_id', $session->id_user)
+ ->set('created_at', $date_value)
->insert();
}
}
+
+ function update_from_plantilla($plantilla_id = 0){
+
+ $session = session();
+ $datetime = (new \CodeIgniter\I18n\Time("now"));
+ $date_value = $datetime->format('Y-m-d H:i:s');
+
+ // Se obtienen todos los id de clientes que usen esa tarifa
+ $clientes = $this->db
+ ->table($this->table . " t1")
+ ->select("t1.cliente_id AS id")
+ ->where('t1.plantilla_id', $plantilla_id)
+ ->distinct()
+ ->get()->getResultObject();
+
+ if(count($clientes)<=0){
+ return;
+ }
+
+ foreach ($clientes as $cliente){
+ // Se borran los valores existentes
+ $this->delete_values($cliente->id);
+
+ // Se cargan los valores de la plantilla
+ $plantillaModel = model('App\Models\Clientes\ClientePlantillaPreciosLineasModel');
+ $values = $plantillaModel->getResource($plantilla_id)->get()->getResultObject();
+ foreach ($values as $value) {
+ $this->db
+ ->table($this->table . " t1")
+ ->set('cliente_id', $cliente->id)
+ ->set('plantilla_id', $plantilla_id)
+ ->set('tipo', $value->tipo)
+ ->set('tipo_maquina', $value->tipo_maquina)
+ ->set('tipo_impresion', $value->tipo_impresion)
+ ->set('tiempo_min', $value->tiempo_min)
+ ->set('tiempo_max', $value->tiempo_max)
+ ->set('precio_hora', $value->precio_hora)
+ ->set('margen', $value->margen)
+ ->set('user_updated_id', $value->user_updated_id)
+ ->set('updated_at', $value->updated_at)
+ ->set('user_created_id', $session->id_user)
+ ->set('created_at', $date_value)
+ ->insert();
+ }
+ }
+ }
+
+ // config es un objeto que incluye
+ // - tipo: 'interior', 'cubierta', 'sobrecubierta'
+ // - tipo_maquina: 'toner', 'inkjet'
+ // - tipo_impresion: 'negro', 'color', 'negrohq', 'colorhq'
+
+ function get_precio_hora($cliente_id, $config, $tiempo){
+
+ // Se cargan los valores de la plantilla
+ $values = $this->db
+ ->table($this->table . " t1")
+ ->select("t1.precio_hora AS precio_hora, t1.margen AS margen")
+ ->where('cliente_id', $cliente_id)
+ ->where('tipo', $config->tipo)
+ ->where('tipo_maquina', $config->tipo_maquina)
+ ->where('tipo_impresion', $config->tipo_impresion)
+ ->where('tiempo_min <=', $tiempo)
+ ->where('tiempo_max >=', $tiempo)
+ ->where('is_deleted', 0)
+ ->get()->getResultObject();
+
+ if(count($values)>0){
+ return [floatval(($values[0])->precio_hora), floatval(($values[0])->margen)];
+ }
+ return [null, null];
+ }
+
/**
* Get resource data.
diff --git a/ci4/app/Models/Configuracion/MaquinaModel.php b/ci4/app/Models/Configuracion/MaquinaModel.php
index 9fdbf585..f9cb6f52 100755
--- a/ci4/app/Models/Configuracion/MaquinaModel.php
+++ b/ci4/app/Models/Configuracion/MaquinaModel.php
@@ -367,7 +367,7 @@ class MaquinaModel extends \App\Models\GoBaseModel
->select(
"t1.id AS maquina_id, t1.nombre AS maquina, t1.ancho_impresion AS ancho_impresion,
t1.alto_impresion AS alto_impresion, t1.ancho AS ancho, t1.alto AS alto,
- t1.is_rotativa AS is rotativa, t1.alto_click AS alto_click, t1.velocidad AS velocidad,
+ t1.is_rotativa AS is_rotativa, t1.is_tinta AS is_tinta, t1.alto_click AS alto_click, t1.velocidad AS velocidad,
t1.precio_tinta_negro AS precio_tinta_negro, t1.precio_tinta_color AS precio_tinta_color,
t1.velocidad_corte AS velocidad_corte, t1.precio_hora_corte AS precio_hora_corte,
t1.forzar_num_formas_horizontales_cubierta AS forzar_num_formas_horizontales_cubierta,
diff --git a/ci4/app/Services/PresupuestoService.php b/ci4/app/Services/PresupuestoService.php
index 7ed9f781..0929a5a6 100755
--- a/ci4/app/Services/PresupuestoService.php
+++ b/ci4/app/Services/PresupuestoService.php
@@ -441,6 +441,21 @@ class PresupuestoService extends BaseService
}
}
+ public static function getHorasMaquina($totalClicks, $precioClick, $velocidadMaquina) {
+ try {
+
+ if($precioClick>0 && $velocidadMaquina>0)
+ $horas = (1.0*$totalClicks/$precioClick)/$velocidadMaquina/60.0;
+ else
+ $horas = 0;
+
+ return $horas;
+
+ } catch (Exception $e) {
+ return 0;
+ }
+ }
+
/**
* Devuelve la dimensión del lomo interior.
diff --git a/ci4/app/Views/themes/backend/vuexy/form/clientes/plantillaprecios/viewClienteplantillapreciosForm.php b/ci4/app/Views/themes/backend/vuexy/form/clientes/plantillaprecios/viewClienteplantillapreciosForm.php
index 43e11b59..ce106e7b 100755
--- a/ci4/app/Views/themes/backend/vuexy/form/clientes/plantillaprecios/viewClienteplantillapreciosForm.php
+++ b/ci4/app/Views/themes/backend/vuexy/form/clientes/plantillaprecios/viewClienteplantillapreciosForm.php
@@ -178,6 +178,18 @@
editor.on( 'postSubmit', function ( e, json, data, action ) {
yeniden(json.= csrf_token() ?>);
+
+ const domain = window.location.origin
+ fetch(domain + "/clientes/clienteprecios/update/" + -1 , {
+ method: "POST",
+ body: JSON.stringify({
+ plantilla_id: id,
+ = csrf_token() ?? "token" ?> : = csrf_token() ?>v
+ }),
+ headers: {
+ "Content-type": "application/json; charset=UTF-8"
+ }
+ })
});
editor.on( 'submitSuccess', function ( e, json, data, action ) {
diff --git a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosPresupuestoClienteItems.php b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosPresupuestoClienteItems.php
index e7521ed1..0d849206 100755
--- a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosPresupuestoClienteItems.php
+++ b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_datosPresupuestoClienteItems.php
@@ -269,14 +269,14 @@