diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index 8ccde276..9ddf7463 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -669,7 +669,7 @@ $routes->group('facturas', ['namespace' => 'App\Controllers\Facturacion'], funct $routes->post('datatable/(:any)', 'FacturasLineas::datatable/$1', ['as' => 'dataTableOfLineasFacturas']); $routes->post('menuPedidosPendientes/(:num)', 'Facturas::menuPedidosPendientes/$1', ['as' => 'menuPedidosPendientesImpresion']); $routes->post('addLineaPedidoImpresion/(:num)', 'Facturas::addLineaPedidoImpresion/$1', ['as' => 'addLineaPedidoImpresion2Factura']); - $routes->post('addLineaPedidoImpresion/(:num)', 'Facturas::addLineaPedidoImpresion/$1', ['as' => 'addLineaPedidoImpresion2Factura']); + $routes->post('addExcedentes/(:any)', 'Facturas::addExcedentes/$1', ['as' => 'addLineaExcedentes']); $routes->get('deleteLinea/(:any)', 'FacturasLineas::deleteLinea/$1', ['as' => 'deleteLineaFactura']); $routes->get('delete/(:any)', 'Facturas::delete/$1', ['as' => 'borrarFactura']); $routes->post('deleteFacturaLineaPedido', 'Facturas::deleteLineaPedidoImpresion', ['as' => 'deleteLineaPedidoImpresion']); diff --git a/ci4/app/Controllers/Facturacion/Facturas.php b/ci4/app/Controllers/Facturacion/Facturas.php index abf1db51..d21c2bf2 100755 --- a/ci4/app/Controllers/Facturacion/Facturas.php +++ b/ci4/app/Controllers/Facturacion/Facturas.php @@ -392,13 +392,16 @@ class Facturas extends \App\Controllers\BaseResourceController $postData = $this->request->getPost(); + $pendiente = $postData['pendiente'] ?? 0; + $total = $postData['total'] ?? 0; + $data = [ 'base' => $postData['base'] ?? 0, - 'total' => $postData['total'] ?? 0, - 'pendiente' => $postData['pendiente'] ?? 0, + 'total' => $total, + 'pendiente' => $pendiente, 'total_pagos' => $postData['total_pagos'] ?? 0, 'user_updated_id' => auth()->user()->id, - 'estado_pago' => (intval($postData['pendiente'] ?? 0)==0) ? 'pagada' : 'pendiente', + 'estado_pago' => (intval($pendiente)==0 && intval($total)!=0) ? 'pagada' : 'pendiente', ]; $newTokenHash = csrf_hash(); @@ -422,6 +425,54 @@ class Facturas extends \App\Controllers\BaseResourceController } } + public function addExcedentes($factura_id){ + + if ($this->request->isAJAX()) { + $model_factura_linea = model('\App\Models\Facturas\FacturaLineaModel'); + + $postData = $this->request->getPost(); + $cantidad = $postData['cantidad'] ?? 0; + $precio_unidad = $postData['precio_unidad'] ?? 0; + $iva = $postData['iva'] ?? 0; + $descripcion = $postData['descripcion'] ?? ''; + $descuento = $postData['descuento'] ?? 0; + $pedido_linea_impresion_id = $postData['pedido_linea_impresion_id'] ?? null; + $pedido_linea_maquetacion_id = $postData['pedido_linea_maquetacion_id'] ?? null; + $pedido_id = $postData['pedido_id'] ?? 0; + + $nuevo_precio_unidad = round($precio_unidad*(100-floatval($descuento))/100, 4); + $base = round($cantidad * $nuevo_precio_unidad, 2); + $total_iva = round($base * $iva / 100, 2); + + $data = (object)[ + 'factura_id'=>$factura_id, + 'pedido_linea_impresion_id'=>$pedido_linea_impresion_id, + 'pedido_linea_maquetacion_id'=>$pedido_linea_maquetacion_id, + 'descripcion'=>$newString = preg_replace_callback('/Impresión de (\d+) ejemplares/', function ($matches) use ($cantidad) { + return 'Impresión de ' . $cantidad . ' ejemplares'; + }, $descripcion), + 'cantidad'=>$cantidad, + 'precio_unidad'=> $nuevo_precio_unidad, + 'iva' => $iva, + 'base' => $base, + 'total_iva' => $total_iva, + 'total' => round($base + $total_iva, 2), + 'user_updated_id' => auth()->user()->id, + ]; + + $model_factura_linea->insert($data); + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $data_ret = [ + $csrfTokenName => $newTokenHash + ]; + return $this->respond($data_ret); + } + else { + return $this->failUnauthorized('Invalid request', 403); + } + } public function addLineaPedidoImpresion($factura_id){ @@ -433,48 +484,55 @@ class Facturas extends \App\Controllers\BaseResourceController try{ $pedido_linea_id = $this->request->getPost('lineaPedido') ?? 0; $linea = $model_pedido_linea->find($pedido_linea_id); + + $factura = $this->model->find($factura_id); - if($linea){ - $presupuesto = $model_presupuesto->find($linea->presupuesto_id); - if($presupuesto){ - // Se añade la linea de factura - $descripcion = $model_presupuesto->generarLineaPedido($presupuesto->id, true, $linea->pedido_id); - $cantidad = intval($presupuesto->tirada) - intval($this->model->getCantidadLineaPedidoFacturada($linea->id)); - $base = $cantidad * floatval($presupuesto->total_precio_unidad); - $total_iva = $base * ($presupuesto->iva_reducido==1 ? 0.04 : 0.21); - // se redondea a dos decimales - $total_iva = round($total_iva, 2); - $total = $base + $total_iva; + if($factura){ - $data = (object)[ - 'factura_id'=>$factura_id, - 'pedido_linea_impresion_id'=>$linea->pedido_id, - 'descripcion'=>$descripcion[0]->concepto, - 'cantidad'=>$cantidad, - 'precio_unidad'=>$presupuesto->total_precio_unidad, - 'iva' => $presupuesto->iva_reducido==1 ? 4 : 21, - 'base' => $base, - 'total_iva' => $total_iva, - 'total' => $total, - 'user_updated_id' => auth()->user()->id, - ]; + if($linea){ + $presupuesto = $model_presupuesto->find($linea->presupuesto_id); - $model_factura_linea->insert($data); + if($presupuesto){ + // Se añade la linea de factura + $descripcion = $model_presupuesto->generarLineaPedido($presupuesto->id, true, $linea->pedido_id); + $cantidad = intval($presupuesto->tirada) - intval($this->model->getCantidadLineaPedidoFacturada($linea->id)); + $base = $cantidad * floatval($presupuesto->total_precio_unidad); + $base = round($base, 2); + $total_iva = $base * ($presupuesto->iva_reducido==1 ? 0.04 : 0.21); + // se redondea a dos decimales + $total_iva = round($total_iva, 2); + $total = $base + $total_iva; - $id = $model_factura_linea->getInsertID(); - - if($id){ - - $model_factura_linea->addFacturaPedidoLinea($factura_id, $linea->id, $cantidad); - - $newTokenHash = csrf_hash(); - $csrfTokenName = csrf_token(); - $data = [ - 'error' => 0, - 'id' => $id, - $csrfTokenName => $newTokenHash + $data = (object)[ + 'factura_id'=>$factura_id, + 'pedido_linea_impresion_id'=>$linea->pedido_id, + 'descripcion'=>$descripcion[0]->concepto, + 'cantidad'=>$cantidad, + 'precio_unidad'=>$presupuesto->total_precio_unidad, + 'iva' => $presupuesto->iva_reducido==1 ? 4 : 21, + 'base' => $base, + 'total_iva' => $total_iva, + 'total' => $total, + 'user_updated_id' => auth()->user()->id, ]; - return $this->respond($data); + + $model_factura_linea->insert($data); + + $id = $model_factura_linea->getInsertID(); + + if($id){ + + $model_factura_linea->addFacturaPedidoLinea($factura_id, $linea->id, $cantidad); + + $newTokenHash = csrf_hash(); + $csrfTokenName = csrf_token(); + $data = [ + 'error' => 0, + 'id' => $id, + $csrfTokenName => $newTokenHash + ]; + return $this->respond($data); + } } } } diff --git a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php index aa2cdbdf..03ff9410 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php @@ -1073,14 +1073,12 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController try { $return_data = []; - if ($extra_info) { - $info = [ - 'merma' => 0, - 'lomo_cubierta' => 0.0, - 'lomo_sobrecubierta' => 0.0, - 'user_id' => auth()->user()->id, - ]; - } + $info = [ + 'merma' => 0, + 'lomo_cubierta' => 0.0, + 'lomo_sobrecubierta' => 0.0, + 'user_id' => auth()->user()->id, + ]; $tirada = $datos_entrada['tirada']; $tamanio = $datos_entrada['tamanio']; @@ -1568,11 +1566,13 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController )); } + $info['lomo_cubierta'] = $lomo; + $info['lomo_sobrecubierta'] = $lomo_sobrecubierta; + $return_data['info'] = $info; + + if ($extra_info) { // && $tirada[$t] == $selected_tirada) { - $info['lomo_cubierta'] = $lomo; - $info['lomo_sobrecubierta'] = $lomo_sobrecubierta; - $return_data['info'] = $info; $return_data['info']['interior'] = $interior; $return_data['info']['cubierta'] = $cubierta; $return_data['info']['sobrecubierta'] = $linea_sobrecubierta; diff --git a/ci4/app/Models/Facturas/FacturaLineaModel.php b/ci4/app/Models/Facturas/FacturaLineaModel.php index 757f4bad..b808ac8c 100644 --- a/ci4/app/Models/Facturas/FacturaLineaModel.php +++ b/ci4/app/Models/Facturas/FacturaLineaModel.php @@ -40,10 +40,14 @@ class FacturaLineaModel extends \App\Models\BaseModel { t1.pedido_linea_impresion_id AS pedido_linea_impresion_id, t1.pedido_maquetacion_id AS pedido_maquetacion_id, t1.descripcion AS descripcion, t1.cantidad as cantidad, t1.precio_unidad AS precio_unidad, t1.iva AS iva, t1.base AS base, t1.total_iva AS total_iva, t1.total AS total, t1.data AS data, t2.pedido_id AS pedido_id, - t3.total_aceptado AS total_aceptado" + t3.total_aceptado AS total_aceptado, t4.tirada_flexible AS tirada_flexible, t4.descuento_tirada_flexible AS descuento_tirada_flexible, + t6.cantidad AS cantidad_albaran" ) ->join("pedidos_linea t2", "t2.id = t1.pedido_linea_impresion_id", "left") ->join("presupuestos t3", "t3.id = t2.presupuesto_id", "left") + ->join("clientes t4", "t4.id = t3.cliente_id", "left") + ->join("albaranes t5", "t5.pedido_id = t2.pedido_id", "left") + ->join("albaranes_lineas t6", "t6.albaran_id = t5.id", "left") ->where("t1.factura_id", $factura_id) ->where("t1.deleted_at", null); diff --git a/ci4/app/Views/themes/vuexy/form/facturas/_addPedidosItems.php b/ci4/app/Views/themes/vuexy/form/facturas/_addPedidosItems.php index 1b616980..453074b7 100644 --- a/ci4/app/Views/themes/vuexy/form/facturas/_addPedidosItems.php +++ b/ci4/app/Views/themes/vuexy/form/facturas/_addPedidosItems.php @@ -118,11 +118,10 @@ $('#addNewPedidoImpresion').on('click', function(){ yeniden(response.); // se ajustan el ancho de las columnas - $('#tableOfLineasFactura').DataTable().columns.adjust().draw(); $('#pedidoImpresion').val(null).trigger('change'); // Se actualiza la tabla de lineas de factura tableLineas.clearPipeline(); - tableLineas.draw(); + $('#tableOfLineasFactura').DataTable().columns.adjust().draw(); } }); }); diff --git a/ci4/app/Views/themes/vuexy/form/facturas/_facturaLineasItems.php b/ci4/app/Views/themes/vuexy/form/facturas/_facturaLineasItems.php index 2a4142f8..1c8dcbaf 100644 --- a/ci4/app/Views/themes/vuexy/form/facturas/_facturaLineasItems.php +++ b/ci4/app/Views/themes/vuexy/form/facturas/_facturaLineasItems.php @@ -255,7 +255,7 @@ var tableLineas = $('#tableOfLineasFactura').DataTable({ error_text = 'El total del pedido ('+ total_aceptado + '€) no coincide con la línea ('+ subtotal + '€)'; } - return ` + var returned_data = `
${data}
@@ -265,11 +265,55 @@ var tableLineas = $('#tableOfLineasFactura').DataTable({ ${error_text} -
- - -
+
+
+ + +
`; + + if (row.tirada_flexible === "1"){ + returned_data += ` +
+ + +
+
+ + +
+ `; + if(row.cantidad + +
+ + `; + } + else{ + returned_data += ` + + `; + } + } + else{ + returned_data += ` + + `; + } + + return returned_data; } else{ return ` @@ -372,7 +416,8 @@ function updateFooterLineas(table){ base: totalSubtotal, total: totalTotal, total_pagos: total_pagos, - pendiente: pendientePago + pendiente: pendientePago, + : v } }).done((data, textStatus, jqXHR) => { if(data.estado_pago == 'pagada'){ @@ -397,12 +442,12 @@ $(document).on('click', '.btn-delete', function(e) { asyncConfirmDialogWithParams( "Borrar Linea de Factura", "¿Está seguro de borrar la línea? Esta acción no se puede deshacer.", - deleteConfirmed, function(){}, [dataId, row]) + deleteConfirmedLinea, function(){}, [dataId, row]) } }); -function deleteConfirmed(params){ +function deleteConfirmedLinea(params){ var factura_linea_id = params[0]; var row = params[1]; const row_data = tableLineas.row($(row)).data(); @@ -415,7 +460,8 @@ function deleteConfirmed(params){ data: { factura_id: id ?>, pedido_linea_impresion_id: row_data.pedido_linea_impresion_id, - cantidad: row_data.cantidad + cantidad: row_data.cantidad, + : v } }).done((data, textStatus, jqXHR) => { @@ -457,4 +503,47 @@ $('#addLineaFactura').on('click', function() { }); +$(document).on('click', '.btn-excedentes', function(e) { + const row = $(this).data('row'); + const row_data = tableLineas.row(row).data(); + + const pedido_id = row_data.pedido_id; + + var pedido_linea_impresion_id = null; + var pedido_linea_maquetacion_id = null; + + if(row_data.pedido_linea_impresion_id != null){ + pedido_linea_impresion_id = row_data.pedido_linea_impresion_id + } + else{ + pedido_linea_maquetacion_id = row_data.pedido_maquetacion_id + } + + var factura_id = id ?>; + + var url = ''; + url = url.replace(':factura_id', factura_id ); + + $.ajax({ + url: url, + method: 'POST', + data: { + pedido_id: pedido_id, + pedido_linea_impresion_id: pedido_linea_impresion_id, + pedido_linea_maquetacion_id: pedido_linea_maquetacion_id, + precio_unidad: row_data.precio_unidad, + descripcion: row_data.descripcion, + iva: row_data.iva, + descuento: row_data.descuento_tirada_flexible, + cantidad: parseInt(row_data.cantidad_albaran)-parseInt(row_data.cantidad), + : v + } + }).done((data, textStatus, jqXHR) => { + $('#tableOfLineasFactura').DataTable().clearPipeline(); + $('#tableOfLineasFactura').DataTable().draw(); + }).fail((jqXHR, textStatus, errorThrown) => { + popErrorAlert(jqXHR.responseJSON.messages.error) + }) +}); + endSection() ?> \ No newline at end of file