añadido margen a tarifas impresion

This commit is contained in:
Jaime Jiménez
2024-02-24 14:05:01 +01:00
parent c6b7a1712b
commit a44ee4e4ed
9 changed files with 71 additions and 31 deletions

View File

@ -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');

View File

@ -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'] +

View File

@ -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",

View File

@ -20,6 +20,7 @@ return [
'userCreatedId' => 'User Created ID',
'userUpdatedId' => 'User Updated ID',
'uso' => 'Uso',
'margen' => 'Margen',
'interior' => 'Interior',
'cubierta' => 'Cubierta',
'sobrecubierta' => 'Sobrecubierta',

View File

@ -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;
}

View File

@ -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;

View File

@ -50,6 +50,7 @@
<th><?= lang('MaquinasTarifasImpresions.uso') ?></th>
<th><?= lang('MaquinasTarifasImpresions.tipo') ?></th>
<th><?= lang('MaquinasTarifasImpresions.precio') ?></th>
<th><?= lang('MaquinasTarifasImpresions.margen') ?></th>
<th class="text-nowrap"><?= lang('Basic.global.Action') ?></th>
</tr>
</thead>
@ -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'

View File

@ -144,6 +144,7 @@ function format(d) {
'<input id="' + d.row_id + '_checkClicks" name="' + d.row_id +'_checkClicks" class="update-totales" style="bottom:0;width: 15px; padding: 0; margin:0;" type="checkbox" ' + (d.check_impresion_total==true?'checked':'') + '>' +
'</div>'+
'<input id="' + d.row_id +'_margenImpresion" name="' + d.row_id +'_margenImpresion" readonly class="lp-input lp-cell lp-cell-disabled ' + d.row_class + '-input" type="text" value="' + d.margenImpresion +'" style="display: none;">' +
'<input id="' + d.row_id +'_margenClicks" name="' + d.row_id +'_margenClicks" readonly class="lp-input lp-cell lp-cell-disabled ' + d.row_class + '-input" type="text" value="' + d.margenClicks +'" style="display: none;">' +
'</div>' +
'</td>'
@ -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,

View File

@ -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) + '€')