diff --git a/ci4/app/Controllers/Configuracion/Maquinastarifasimpresion.php b/ci4/app/Controllers/Configuracion/Maquinastarifasimpresion.php index 60bec560..42f509c4 100755 --- a/ci4/app/Controllers/Configuracion/Maquinastarifasimpresion.php +++ b/ci4/app/Controllers/Configuracion/Maquinastarifasimpresion.php @@ -234,6 +234,13 @@ class Maquinastarifasimpresion extends \App\Controllers\GoBaseResourceController ->validator('Validate::notEmpty', array( 'message' => lang('MaquinasTarifasImpresions.validation.tipo.required')) ), + Field::inst('margen') + ->validator('Validate::numeric', array( + 'message' => lang('MaquinasTarifasImpresions.validation.precio.decimal')) + ) + ->validator('Validate::notEmpty', array( + 'message' => lang('MaquinasTarifasImpresions.validation.tipo.required')) + ), Field::inst('maquina_id'), Field::inst('user_created_id'), Field::inst('created_at'), @@ -260,9 +267,11 @@ class Maquinastarifasimpresion extends \App\Controllers\GoBaseResourceController 'uso' => $values['uso'], 'is_deleted' => 0)); + $id = $builder->get()->getFirstRow()->id; + // No se pueden duplicar valores al crear o al editar if ($builder->countAllResults() >= 1) { - if (($action === Editor::ACTION_EDIT && $builder->get()->getFirstRow()->id != $pkey) + if (($action === Editor::ACTION_EDIT && $id != $pkey) || $action === Editor::ACTION_CREATE) { return lang('MaquinasTarifasImpresions.validation.duplicated_uso_tipo'); diff --git a/ci4/app/Controllers/Presupuestos/Cosidotapablanda.php b/ci4/app/Controllers/Presupuestos/Cosidotapablanda.php index 3c8f3a74..3ce1ccc5 100755 --- a/ci4/app/Controllers/Presupuestos/Cosidotapablanda.php +++ b/ci4/app/Controllers/Presupuestos/Cosidotapablanda.php @@ -791,7 +791,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController } $tarifamodel = new MaquinasTarifasImpresionModel(); - [$tarifaId, $tarifa] = $tarifamodel->getTarifa($maquina->maquina_id, ($uso=='guardas')?'interior':$uso, $tipo); + [$tarifaId, $tarifa, $tarifa_margen] = $tarifamodel->getTarifa($maquina->maquina_id, ($uso=='guardas')?'interior':$uso, $tipo); // Generates a message like: User 123 logged into the system from 127.0.0.1 if(!is_float($tarifa)){ @@ -799,10 +799,10 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController } if($maquina->is_inkjet){ - $linea = PresupuestoService::getCostesLinea($uso, $datosPedido, $maquina, $papel, $opciones_papel, $tarifa, $parametrosInkjet->a_favor_fibra); + $linea = PresupuestoService::getCostesLinea($uso, $datosPedido, $maquina, $papel, $opciones_papel, $tarifa, $tarifa_margen, $parametrosInkjet->a_favor_fibra); } else{ - $linea = PresupuestoService::getCostesLinea($uso, $datosPedido, $maquina, $papel, $opciones_papel, $tarifa); + $linea = PresupuestoService::getCostesLinea($uso, $datosPedido, $maquina, $papel, $opciones_papel, $tarifa, $tarifa_margen); } if(array_key_exists('error', $linea)){ @@ -842,6 +842,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController $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; @@ -849,10 +850,10 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController $linea['fields']['tipo_maquina'] = $maquina->is_inkjet?'inkjet':'toner'; $linea['fields']['precio_hora'] = $precio_hora*(1+$margen_precio_hora/100.0); - $linea['fields']['precio_hora_margen'] = $margen_precio_hora; + $linea['fields']['precio_hora_margen'] = $precio_hora*($margen_precio_hora/100.0); $linea['fields']['horas_maquina'] = $tiempo; - $linea['fields']['precio_impresion_horas'] = $precio_hora*(1+$margen_precio_hora/100.0)*$tiempo; - $linea['fields']['margen_impresion_horas'] = $precio_hora*($margen_precio_hora/100.0)*$tiempo; + $linea['fields']['precio_impresion_horas'] = $linea['fields']['precio_hora']*$tiempo; + $linea['fields']['margen_impresion_horas'] = $linea['fields']['precio_hora_margen']*$tiempo; // para guardas if(\property_exists($datosPedido, 'paginas_impresion')){ @@ -979,7 +980,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController foreach ($maquinas as $maquina) { $tarifamodel = new MaquinasTarifasImpresionModel(); - [$tarifaId, $tarifa] = $tarifamodel->getTarifa($maquina->maquina_id, $uso, is_array($tipo)?'color':$tipo); + [$tarifaId, $tarifa, $tarifa_margen] = $tarifamodel->getTarifa($maquina->maquina_id, $uso, is_array($tipo)?'color':$tipo); if(!is_float($tarifa)){ continue; } @@ -991,7 +992,7 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController $linea['fields']['tarifa_impresion_id'] = $tarifaId; - $linea['fields']['precios_pliegos'] = $precio_pliego_impresion; + $linea['fields']['precios_pliegos'] = $precio_pliego_impresion+$margen_pliego_impresion; $linea['fields']['precio_libro'] = $linea['fields']['pliegos_libro'] * $precio_pliego_impresion; // Precio papel pedido @@ -1020,8 +1021,10 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController $linea['fields']['datosTipologias'] = $datosTipologias[0]; // impresion - $linea['fields']['precio_click'] = $tarifa; + $linea['fields']['precio_click'] = $tarifa *(1+ $tarifa_margen/100.0); + $linea['fields']['precio_click_margen'] = $tarifa *($tarifa_margen/100.0); $linea['fields']['precio_click_pedido'] = $linea['fields']['clicks_pedido'] * $linea['fields']['precio_click']; + $linea['fields']['margen_click_pedido'] = $linea['fields']['clicks_pedido'] * $linea['fields']['precio_click_margen']; $linea['fields']['tiempo_maquina'] = PresupuestoService::getTiempoMaquina( $linea['fields']['precio_click_pedido'], @@ -1046,10 +1049,10 @@ class Cosidotapablanda extends \App\Controllers\GoBaseResourceController } $linea['fields']['precio_hora'] = $precio_hora*(1+$margen_precio_hora/100.0); - $linea['fields']['precio_hora_margen'] = $margen_precio_hora; + $linea['fields']['precio_hora_margen'] = $precio_hora*($margen_precio_hora/100.0); $linea['fields']['horas_maquina'] = $tiempo; - $linea['fields']['precio_impresion_horas'] = $precio_hora*(1+$margen_precio_hora/100.0)*$tiempo; - $linea['fields']['margen_impresion_horas'] = $precio_hora*($margen_precio_hora/100.0)*$tiempo; + $linea['fields']['precio_impresion_horas'] = $linea['fields']['precio_hora']*$tiempo; + $linea['fields']['margen_impresion_horas'] = $linea['fields']['precio_hora_margen']*$tiempo; // total linea rotativa //$linea['fields']['total_impresion'] = $linea['fields']['precio_pedido'] + $linea['fields']['precio_click_pedido'] + $linea['fields']['precio_tinta'] + diff --git a/ci4/app/Entities/Configuracion/MaquinasTarifasImpresionEntity.php b/ci4/app/Entities/Configuracion/MaquinasTarifasImpresionEntity.php index f0a49f25..768570af 100755 --- a/ci4/app/Entities/Configuracion/MaquinasTarifasImpresionEntity.php +++ b/ci4/app/Entities/Configuracion/MaquinasTarifasImpresionEntity.php @@ -11,6 +11,7 @@ class MaquinasTarifasImpresionEntity extends \CodeIgniter\Entity\Entity "tipo" => null, "precio" => null, "uso" => null, + "margen" => null, "user_created_id" => 0, "user_updated_id" => 0, "is_deleted" => 0, @@ -20,6 +21,7 @@ class MaquinasTarifasImpresionEntity extends \CodeIgniter\Entity\Entity protected $casts = [ "maquina_id" => "int", "precio" => "float", + "margen" => "float", "user_created_id" => "int", "user_updated_id" => "int", "is_deleted" => "int", diff --git a/ci4/app/Language/es/MaquinasTarifasImpresions.php b/ci4/app/Language/es/MaquinasTarifasImpresions.php index dcf2651d..79ce08d2 100755 --- a/ci4/app/Language/es/MaquinasTarifasImpresions.php +++ b/ci4/app/Language/es/MaquinasTarifasImpresions.php @@ -20,6 +20,7 @@ return [ 'userCreatedId' => 'User Created ID', 'userUpdatedId' => 'User Updated ID', 'uso' => 'Uso', + 'margen' => 'Margen', 'interior' => 'Interior', 'cubierta' => 'Cubierta', 'sobrecubierta' => 'Sobrecubierta', diff --git a/ci4/app/Models/Configuracion/MaquinasTarifasImpresionModel.php b/ci4/app/Models/Configuracion/MaquinasTarifasImpresionModel.php index cde4df78..a5b8859b 100755 --- a/ci4/app/Models/Configuracion/MaquinasTarifasImpresionModel.php +++ b/ci4/app/Models/Configuracion/MaquinasTarifasImpresionModel.php @@ -17,9 +17,10 @@ class MaquinasTarifasImpresionModel extends \App\Models\GoBaseModel 1 => "t1.tipo", 2 => "t1.uso", 3 => "t1.precio", + 4 => "t1.margen" ]; - protected $allowedFields = ["maquina_id", "tipo", "precio", "uso", "user_created_id", "user_updated_id", "is_deleted", "deleted_at", "created_at", "updated_at"]; + protected $allowedFields = ["maquina_id", "tipo", "precio", "uso", "margen", "user_created_id", "user_updated_id", "is_deleted", "deleted_at", "created_at", "updated_at"]; protected $returnType = "App\Entities\Configuracion\MaquinasTarifasImpresionEntity"; protected $useTimestamps = true; @@ -94,7 +95,7 @@ class MaquinasTarifasImpresionModel extends \App\Models\GoBaseModel $builder = $this->db ->table($this->table . " t1") ->select( - "t1.id AS id, t1.tipo AS tipo, t1.precio AS precio, t1.uso AS uso" + "t1.id AS id, t1.tipo AS tipo, t1.precio AS precio, t1.uso AS uso, t1.margen AS margen" ); //JJO @@ -111,6 +112,7 @@ class MaquinasTarifasImpresionModel extends \App\Models\GoBaseModel ->orLike("t1.tipo", $search) ->orLike("t1.precio", $search) ->orLike("t1.uso", $search) + ->orLike("t1.margen", $search) ->orLike("t1.id", $search) ->orLike("t1.maquina_id", $search) ->orLike("t1.tipo", $search) @@ -124,7 +126,7 @@ class MaquinasTarifasImpresionModel extends \App\Models\GoBaseModel $builder = $this->db ->table($this->table . " t1") ->select( - "t1.id AS id, t1.precio AS precio" + "t1.id AS id, t1.precio AS precio, t1.margen AS margen" ); //JJO @@ -135,7 +137,7 @@ class MaquinasTarifasImpresionModel extends \App\Models\GoBaseModel $tarifas = $builder->get()->getResultArray(); if (count($tarifas)>0){ - return [$tarifas[0]['id'], floatval($tarifas[0]['precio'])]; + return [$tarifas[0]['id'], floatval($tarifas[0]['precio']), floatval($tarifas[0]['margen'])]; } return $tarifas; } diff --git a/ci4/app/Services/PresupuestoService.php b/ci4/app/Services/PresupuestoService.php index 059fdc56..57b322c5 100755 --- a/ci4/app/Services/PresupuestoService.php +++ b/ci4/app/Services/PresupuestoService.php @@ -40,7 +40,7 @@ class PresupuestoService extends BaseService * * @return [type] */ - public static function getCostesLinea($uso, $datosPedido, $maquina, $papel_impresion, $opciones_papel, $tarifa, $forzar_a_favor_fibra = false) + public static function getCostesLinea($uso, $datosPedido, $maquina, $papel_impresion, $opciones_papel, $tarifa, $tarifa_margen, $forzar_a_favor_fibra = false) { $response['fields'] = []; @@ -64,12 +64,17 @@ class PresupuestoService extends BaseService $precio_click = 0; $precio_click_pedido = 0; + $margen_click_pedido = 0; $pliegos_libro = 0; $cubierta = array_key_exists('cubierta', $opciones_papel) ? $opciones_papel['cubierta'] : 0; $sobrecubierta = array_key_exists('sobrecubierta', $opciones_papel) ? $opciones_papel['sobrecubierta'] : 0; $rotativa = array_key_exists('rotativa', $opciones_papel) ? $opciones_papel['rotativa'] : 0; + + $precio_click = $tarifa * (1 + $tarifa_margen / 100.0); + $margen_click = $tarifa * ($tarifa_margen / 100.0); + //interior (bn o color) if ($cubierta == 0 && $sobrecubierta == 0 && $rotativa == 0) { // precio papel @@ -92,17 +97,22 @@ class PresupuestoService extends BaseService ); // impresion - $precio_click = $tarifa; if($uso=='guardas'){ if(floatval($datosPedido->paginas_impresion)==0) $precio_click_pedido = 0; - elseif (floatval($datosPedido->paginas_impresion)==4) // Una cara + elseif (floatval($datosPedido->paginas_impresion)==4){ // Una cara $precio_click_pedido = $pliegos_pedido * $precio_click; - else // dos caras (impresion normal) + $margen_click_pedido = $pliegos_pedido * $margen_click; + } + else{ // dos caras (impresion normal) $precio_click_pedido = $pliegos_pedido * 2 * $precio_click; + $margen_click_pedido = $pliegos_pedido * 2 * $margen_click; + } } - else + else { $precio_click_pedido = $pliegos_pedido * 2 * $precio_click; + $margen_click_pedido = $pliegos_pedido * 2 * $margen_click; + } } // cubierta o sobrecubierta (siempre a color) @@ -112,7 +122,7 @@ class PresupuestoService extends BaseService // En cubierta y sobrecubierta siempre el mínimo pliego es 1 $pliegos_libro = $pliegos_libro<1?1:$pliegos_libro; $pliegos_pedido = $pliegos_libro * ($datosPedido->tirada + $datosPedido->merma); - $precio_libro = $pliegos_libro * $precio_pliego_impresion; + $precio_libro = $pliegos_libro * ($precio_pliego_impresion + $margen_pliego_impresion); $margen_papel_pedido = $pliegos_libro * $margen_pliego_impresion * ($datosPedido->tirada + $datosPedido->merma); $precio_pedido = $precio_libro * ($datosPedido->tirada + $datosPedido->merma); @@ -124,12 +134,13 @@ class PresupuestoService extends BaseService // impresion if ($tarifa) { - $precio_click = $tarifa; $precio_click_pedido = $pliegos_pedido * $precio_click; + $margen_click_pedido = $pliegos_pedido * $margen_click; // dos caras if($datosPedido->paginas > 2) { $precio_click_pedido *= 2.0; + $margen_click_pedido *= 2.0; } } } @@ -138,7 +149,7 @@ class PresupuestoService extends BaseService // response $response['fields']['pliegos_libro'] = $pliegos_libro; $response['fields']['pliegos_pedido'] = $pliegos_pedido; - $response['fields']['precios_pliegos'] = $precio_pliego_impresion; + $response['fields']['precios_pliegos'] = $precio_pliego_impresion+$margen_pliego_impresion; $response['fields']['precio_libro'] = $precio_libro; $response['fields']['margen_papel_pedido'] = $margen_papel_pedido; $response['fields']['precio_pedido'] = $precio_pedido; @@ -146,6 +157,7 @@ class PresupuestoService extends BaseService $response['fields']['peso'] = $peso; $response['fields']['precio_click'] = $precio_click; $response['fields']['precio_click_pedido'] = $precio_click_pedido; + $response['fields']['margen_click_pedido'] = $margen_click_pedido; $response['fields']['dimensiones_maquina'] = [$maquina->ancho, $maquina->alto]; $response['fields']['dimensiones_maquina_impresion'] = [$maquina->ancho_impresion, $maquina->alto_impresion]; @@ -538,7 +550,7 @@ class PresupuestoService extends BaseService else $horas = 0; - return round($horas,2); + return $horas; } catch (Exception $e) { return 0; diff --git a/ci4/app/Views/themes/backend/vuexy/form/configuracion/maquinas/viewMaquinaForm.php b/ci4/app/Views/themes/backend/vuexy/form/configuracion/maquinas/viewMaquinaForm.php index 03317aa4..21a82a01 100755 --- a/ci4/app/Views/themes/backend/vuexy/form/configuracion/maquinas/viewMaquinaForm.php +++ b/ci4/app/Views/themes/backend/vuexy/form/configuracion/maquinas/viewMaquinaForm.php @@ -50,6 +50,7 @@ + @@ -364,6 +365,11 @@ attr: { type: "number" } + }, { + name: "margen", + attr: { + type: "number" + } }, { "name": "maquina_id", "type": "hidden" @@ -484,6 +490,7 @@ } }, { 'data': 'precio' }, + { 'data': 'margen' }, { data: actionBtns, className: 'row-edit dt-center' diff --git a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_lineasPresupuestoItems.php b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_lineasPresupuestoItems.php index d09cf9c7..cfa93488 100755 --- a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_lineasPresupuestoItems.php +++ b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_lineasPresupuestoItems.php @@ -144,6 +144,7 @@ function format(d) { '' + ''+ '' + + '' + '' + '' @@ -791,7 +792,8 @@ function processRowData(row, rowId, rowClass){ 'margenPapelPedido': isNaN(parseFloat(row.margen_papel_pedido)) ? "": parseFloat(row.margen_papel_pedido).toFixed(2), 'click': isNaN(parseFloat(row.precio_click)) ? "" : parseFloat(row.precio_click).toFixed(6), 'totalClicks': isNaN(parseFloat(row.precio_click_pedido)) ? "" : parseFloat(row.precio_click_pedido).toFixed(2), - 'horasMaquina': isNaN(parseFloat(row.horas_maquina)) ? "" : parseFloat(row.horas_maquina).toFixed(2), + 'margenClicks': isNaN(parseFloat(row.margen_click_pedido)) ? "" : parseFloat(row.margen_click_pedido).toFixed(2), + 'horasMaquina': isNaN(parseFloat(row.horas_maquina)) ? "" : parseFloat(row.horas_maquina).toFixed(4), 'precioHora': isNaN(parseFloat(row.precio_hora)) ? "" : parseFloat(row.precio_hora).toFixed(2), 'precioImpresion': isNaN(parseFloat(row.precio_impresion_horas)) ? "" : parseFloat(row.precio_impresion_horas).toFixed(2), 'margenImpresion': isNaN(parseFloat(row.margen_impresion_horas)) ? "" : parseFloat(row.margen_impresion_horas).toFixed(2), @@ -3471,6 +3473,7 @@ function fill_lp_cubierta(row, fromComparador=false){ } else{ + console.log(row) var portadaObjeto = { anchoLibro:row.dimensiones_libro[0], altoLibro:row.dimensiones_libro[1], @@ -4170,6 +4173,7 @@ function fill_lp_from_bbdd(){ lp['peso_gotas_cg'] = lp['rotativa_peso_gotas_cg'] lp['clicks_pedido'] = lp['rotativa_clicks_total'] lp['precio_click_pedido'] = lp['precio_click_pedido'] + lp['margen_click_pedido'] = lp['margen_click_pedido'] lp['precio_tinta'] = lp['rotativa_precio_tinta'] @@ -4283,6 +4287,7 @@ async function fill_bbdd_from_lp(presupuesto_id){ peso: rowData.peso, precio_click: rowData.click, precio_click_pedido: rowData.totalClicks, + margen_click_pedido: rowData.margenClicks, check_papel_total: $('#' + rowData.row_id + '_checkPapel').is(":checked")?1:0, check_impresion_total: $('#' + rowData.row_id + '_checkClicks').is(":checked")?1:0, tarifa_impresion_id: rowData.tarifa_impresion_id, diff --git a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_resumenPresupuestoItems.php b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_resumenPresupuestoItems.php index a2ad8d04..a50443fc 100755 --- a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_resumenPresupuestoItems.php +++ b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cosidotapablanda/_resumenPresupuestoItems.php @@ -110,13 +110,13 @@ function updateTotales(updateLP=true, updateServicios=true, updateEnvio=true){ if($('#' + rowData.row_id + '_checkClicks').prop('checked')){ totalImpresion += parseFloat($('#' + rowData.row_id + '_precioImpresion').val()) totalImpresion += parseFloat($('#' + rowData.row_id + '_totalClicks').val()) - totalImpresionforMargen += parseFloat($('#' + rowData.row_id + '_precioImpresion').val()) if(rowData.maquinaTipo=='inkjet'){ totalImpresion += parseFloat(rowData.totalTinta) totalImpresion += parseFloat(rowData.totalCorte) } margenImpresion += parseFloat($('#' + rowData.row_id + '_margenImpresion').val()) + margenImpresion += parseFloat($('#' + rowData.row_id + '_margenClicks').val()) if(!isNaN(parseFloat($('#' + rowData.row_id + 'lp_bn_totalTinta').val()))) totalImpresion += parseFloat($('#' + rowData.row_id + 'lp_bn_totalTinta').val()) } @@ -124,15 +124,14 @@ function updateTotales(updateLP=true, updateServicios=true, updateEnvio=true){ } totalImpresion -= margenImpresion - totalImpresionforMargen -= margenImpresion totalPapel -= margenPapel - var porcentajeMargenPapel = isNaN(margenPapel/(totalPapel)*100)?0:margenPapel/(totalPapel)*100 + var porcentajeMargenPapel = isNaN(margenPapel/(totalPapel)*100.0)?0:margenPapel/(totalPapel)*100.0 $('#porcentajeMargenPapel').text(porcentajeMargenPapel.toFixed(0) + '%') $('#totalCostePapel').text(totalPapel.toFixed(2)+ '€') $('#margenPapel').text(margenPapel.toFixed(2) + '€') - var porcentajeMargenImpresion = isNaN(margenImpresion/(totalImpresionforMargen)*100)?0:margenImpresion/(totalImpresionforMargen)*100 + var porcentajeMargenImpresion = isNaN(margenImpresion/(totalImpresion)*100.0)?0:margenImpresion/(totalImpresion)*100.0 $('#porcentajeMargenImpresion').text(porcentajeMargenImpresion.toFixed(0) + '%') $('#totalCosteImpresion').text(totalImpresion.toFixed(2) + '€') $('#margenImpresion').text(margenImpresion.toFixed(2) + '€')