diff --git a/Source/Modulos/Presupuestos de cliente/Views/uEditorPresupuestosCliente.dfm b/Source/Modulos/Presupuestos de cliente/Views/uEditorPresupuestosCliente.dfm index 487bb27c..bedff787 100644 --- a/Source/Modulos/Presupuestos de cliente/Views/uEditorPresupuestosCliente.dfm +++ b/Source/Modulos/Presupuestos de cliente/Views/uEditorPresupuestosCliente.dfm @@ -2,7 +2,6 @@ inherited fEditorPresupuestosCliente: TfEditorPresupuestosCliente Caption = 'Lista de presupuestos de cliente' ClientWidth = 674 ExplicitWidth = 682 - ExplicitHeight = 240 PixelsPerInch = 96 TextHeight = 13 inherited JvNavPanelHeader: TJvNavPanelHeader diff --git a/Source/Modulos/Presupuestos de cliente/Views/uEditorPresupuestosCliente.pas b/Source/Modulos/Presupuestos de cliente/Views/uEditorPresupuestosCliente.pas index fe44728d..394fc3bb 100644 --- a/Source/Modulos/Presupuestos de cliente/Views/uEditorPresupuestosCliente.pas +++ b/Source/Modulos/Presupuestos de cliente/Views/uEditorPresupuestosCliente.pas @@ -127,7 +127,12 @@ end; procedure TfEditorPresupuestosCliente.actGenerarFacturaExecute(Sender: TObject); begin inherited; - GenerarFacturaCli(Presupuestos.ID); + + if (ShowConfirmMessage('Generar factura', Format('¿Desea copiar todos los conceptos del presupuesto %s a la factura?', [Presupuestos.REFERENCIA])) = IDYES) then + GenerarFacturaCli(Presupuestos.ID) + else + GenerarFacturaCli(Presupuestos.ID, False); + actRefrescar.Execute; end; diff --git a/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasCliPreCliUtils.pas b/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasCliPreCliUtils.pas index 90a8e7a9..6cdb2ece 100644 --- a/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasCliPreCliUtils.pas +++ b/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasCliPreCliUtils.pas @@ -10,11 +10,11 @@ type JsListaFacturasGeneradas: TJSDialog; end; - function GenerarFacturaCli(const IDPresupuesto : Integer) : Boolean; overload; - function GenerarFacturaCli(APresupuestos : IBizPresupuestoCliente) : Boolean; overload; + function GenerarFacturaCli(const IDPresupuesto : Integer; const CopiarDetalles: Boolean = True) : Boolean; overload; + function GenerarFacturaCli(APresupuestos : IBizPresupuestoCliente; const CopiarDetalles: Boolean = True) : Boolean; overload; function GenerarFacturaCli : Boolean; overload; - function GenerarFacturas(AFacturas : IBizFacturaCliente; AListaPresupuestos : IBizPresupuestoCliente): Boolean; + function GenerarFacturas(AFacturas : IBizFacturaCliente; AListaPresupuestos : IBizPresupuestoCliente; const CopiarDetalles: Boolean = True): Boolean; implementation @@ -27,14 +27,6 @@ uses uPresupuestosClienteController, uDetallesPresupuestoClienteController, uFacturasClienteController, uBizDetallesFacturaCliente; -// , -// , uProveedoresController, -// , - - -// , uBizContactos, schPedidosClienteClient_Intf, -// ; - var dmGenerarFacturasCli: TdmGenerarFacturasCli; APresupuestosClienteController : IPresupuestosClienteController; @@ -206,7 +198,7 @@ begin end; -function GenerarFacturaCli(const IDPresupuesto : Integer) : Boolean; overload; +function GenerarFacturaCli(const IDPresupuesto : Integer; const CopiarDetalles: Boolean = True) : Boolean; overload; var APresupuesto : IBizPresupuestoCliente; begin @@ -215,13 +207,13 @@ begin Inicializar; APresupuesto := APresupuestosClienteController.Buscar(IDPresupuesto); - Result := GenerarFacturaCli(APresupuesto); + Result := GenerarFacturaCli(APresupuesto, CopiarDetalles); if Assigned(APresupuestosClienteController) then Finalizar; end; -function GenerarFacturaCli(APresupuestos : IBizPresupuestoCliente) : Boolean; overload; +function GenerarFacturaCli(APresupuestos : IBizPresupuestoCliente; const CopiarDetalles: Boolean = True) : Boolean; overload; var ARespuesta : Integer; AFacturasNuevas : IBizFacturaCliente; @@ -238,8 +230,8 @@ begin APresupuestos.DataTable.Active := True; try - AFacturasNuevas := AFacturasClienteController.Nuevo(False); - if GenerarFacturas(AFacturasNuevas, APresupuestos) then + AFacturasNuevas := AFacturasClienteController.Nuevo(False); + if GenerarFacturas(AFacturasNuevas, APresupuestos, CopiarDetalles) then begin if AFacturasNuevas.DataTable.RecordCount = 1 then ShowInfoMessage('La factura se ha dado de alta con el código ' + AFacturasNuevas.REFERENCIA) @@ -288,7 +280,7 @@ begin } end; -function GenerarFacturas(AFacturas : IBizFacturaCliente; AListaPresupuestos : IBizPresupuestoCliente): Boolean; +function GenerarFacturas(AFacturas : IBizFacturaCliente; AListaPresupuestos : IBizPresupuestoCliente; const CopiarDetalles: Boolean = True): Boolean; var AFacturaActual : IBizFacturaCliente; APresupuestosController : IPresupuestosClienteController; @@ -310,9 +302,6 @@ begin if not AListaPresupuestos.DataTable.Active then AListaPresupuestos.DataTable.Active := True; - // ShowHourglassCursor; - // Application.ProcessMessages; - APresupuestosController := TPresupuestosClienteController.Create; try // Ordenar por fecha de albaran @@ -337,69 +326,66 @@ begin APresupuestosController.RecuperarCliente(AListaPresupuestos); AFacturas.Cliente := AListaPresupuestos.Cliente; - //Siempre asignaremos por defecto la referencia de factura de Cliente que tenga el primer albaran del Cliente -{ bEnEdicion := (AFacturas.DataTable.State in dsEditModes); - if not bEnEdicion then - AFacturas.Edit; - AFacturas.REFERENCIA_CLIENTE := AListaPresupuestos.REF_FACTURA_PROV; - AFacturas.Post; - if bEnEdicion then - AFacturas.Edit; - - //Si el albaran es de tipo devolución hacemos la factura de tipo abono - if (AListaPresupuestos.TIPO = CTE_TIPO_ALBARAN_DEV) then - begin - bEnEdicion := (AFacturas.DataTable.State in dsEditModes); - if not bEnEdicion then - AFacturas.Edit; - AFacturas.TIPO := CTE_TIPO_ABONO; - AFacturas.Post; - if bEnEdicion then - AFacturas.Edit; - end; -} AFacturaActual := AFacturas; end; // Ya tengo la factura. Le añado los conceptos del presupuesto AFacturaActual.Detalles.DataTable.Last; - // Añado el título - AFacturasClienteController.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_TITULO); - // Self.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_TITULO); - with AFacturaActual.Detalles do - begin - Edit; - CONCEPTO := 'Presupuesto ' + AListaPresupuestos.REFERENCIA + ' del ' + DateToStr(AListaPresupuestos.FECHA_PRESUPUESTO); - Post; - end; - // Añado el contenido del presupuesto - CopiarArticulosPresupuesto(AListaPresupuestos.Detalles, AFacturaActual.Detalles); - {En los albaranes a Cliente el porte es a nivel del artículo - Self.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_CONCEPTO); - with AFacturaActual.Detalles do + //Se pone la referencia del presupuesto y el total y nos olvidamos de los detalles + if not CopiarDetalles then begin - Edit; - CONCEPTO := 'Porte del presupuesto'; - CANTIDAD := 1; - IMPORTE_UNIDAD := AListaPresupuestos.IMPORTE_PORTE; - Post; - end; - } + AFacturasClienteController.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_CONCEPTO); + with AFacturaActual.Detalles do + begin + Edit; + CONCEPTO := 'Presupuesto ' + AListaPresupuestos.REFERENCIA + ' del ' + DateToStr(AListaPresupuestos.FECHA_PRESUPUESTO); + CANTIDAD := 1; + IMPORTE_UNIDAD := AListaPresupuestos.IMPORTE_TOTAL; //Tecsitel no utiliza el IVA en los presupuestos por lo tanto el + //importe total es lo que queremos (IMPORTE_NETO+IMPORTE_PORTE) + Post; + end; + end + //Se copian los detalles del presupuesto a la factura + else + begin + // Añado el título + AFacturasClienteController.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_TITULO); + with AFacturaActual.Detalles do + begin + Edit; + CONCEPTO := 'Presupuesto ' + AListaPresupuestos.REFERENCIA + ' del ' + DateToStr(AListaPresupuestos.FECHA_PRESUPUESTO); + Post; + end; + // Añado el contenido del presupuesto + CopiarArticulosPresupuesto(AListaPresupuestos.Detalles, AFacturaActual.Detalles); - // Añado el resumen - AFacturasClienteController.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_SUBTOTAL); - //Self.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_SUBTOTAL); - with AFacturaActual.Detalles do - begin - Edit; - CONCEPTO := 'Total del presupuesto ' + AListaPresupuestos.REFERENCIA; - Post; + //En el caso de tener porte el presupuesto se añade una fila con el importe + if (AListaPresupuestos.IMPORTE_PORTE > 0) then + begin + AFacturasClienteController.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_CONCEPTO); + with AFacturaActual.Detalles do + begin + Edit; + CONCEPTO := 'Porte del presupuesto'; + CANTIDAD := 1; + IMPORTE_UNIDAD := AListaPresupuestos.IMPORTE_PORTE; + Post; + end; + end; + + // Añado el resumen + AFacturasClienteController.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_SUBTOTAL); + with AFacturaActual.Detalles do + begin + Edit; + CONCEPTO := 'Total del presupuesto ' + AListaPresupuestos.REFERENCIA; + Post; + end; end; // Añado una línea en blanco AFacturasClienteController.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_CONCEPTO); - // Self.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_CONCEPTO); with AFacturaActual.Detalles do begin Edit; @@ -410,7 +396,6 @@ begin // Guardo la factura que acabo de generar o editar AFacturaActual.CalcularImporteTotal; AFacturasClienteController.Guardar(AFacturaActual); - // Self.Guardar(AFacturaActual); // Asocio la factura con el presupuesto AListaPresupuestos.Edit; AListaPresupuestos.ID_FACTURA := AFacturaActual.ID; @@ -422,8 +407,7 @@ begin Result := True; finally APresupuestosController := NIL; -// HideHourglassCursor end; - end; +end; end.