Se pregunta al generar una factura si se desea copiar los detalles o no

git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@434 0c75b7a4-871f-7646-8a2f-f78d34cc349f
This commit is contained in:
roberto 2008-06-05 09:32:50 +00:00
parent aa2c5dbd72
commit 7156106993
3 changed files with 64 additions and 76 deletions

View File

@ -2,7 +2,6 @@ inherited fEditorPresupuestosCliente: TfEditorPresupuestosCliente
Caption = 'Lista de presupuestos de cliente' Caption = 'Lista de presupuestos de cliente'
ClientWidth = 674 ClientWidth = 674
ExplicitWidth = 682 ExplicitWidth = 682
ExplicitHeight = 240
PixelsPerInch = 96 PixelsPerInch = 96
TextHeight = 13 TextHeight = 13
inherited JvNavPanelHeader: TJvNavPanelHeader inherited JvNavPanelHeader: TJvNavPanelHeader

View File

@ -127,7 +127,12 @@ end;
procedure TfEditorPresupuestosCliente.actGenerarFacturaExecute(Sender: TObject); procedure TfEditorPresupuestosCliente.actGenerarFacturaExecute(Sender: TObject);
begin begin
inherited; 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; actRefrescar.Execute;
end; end;

View File

@ -10,11 +10,11 @@ type
JsListaFacturasGeneradas: TJSDialog; JsListaFacturasGeneradas: TJSDialog;
end; end;
function GenerarFacturaCli(const IDPresupuesto : Integer) : Boolean; overload; function GenerarFacturaCli(const IDPresupuesto : Integer; const CopiarDetalles: Boolean = True) : Boolean; overload;
function GenerarFacturaCli(APresupuestos : IBizPresupuestoCliente) : Boolean; overload; function GenerarFacturaCli(APresupuestos : IBizPresupuestoCliente; const CopiarDetalles: Boolean = True) : Boolean; overload;
function GenerarFacturaCli : 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 implementation
@ -27,14 +27,6 @@ uses
uPresupuestosClienteController, uDetallesPresupuestoClienteController, uPresupuestosClienteController, uDetallesPresupuestoClienteController,
uFacturasClienteController, uBizDetallesFacturaCliente; uFacturasClienteController, uBizDetallesFacturaCliente;
// ,
// , uProveedoresController,
// ,
// , uBizContactos, schPedidosClienteClient_Intf,
// ;
var var
dmGenerarFacturasCli: TdmGenerarFacturasCli; dmGenerarFacturasCli: TdmGenerarFacturasCli;
APresupuestosClienteController : IPresupuestosClienteController; APresupuestosClienteController : IPresupuestosClienteController;
@ -206,7 +198,7 @@ begin
end; end;
function GenerarFacturaCli(const IDPresupuesto : Integer) : Boolean; overload; function GenerarFacturaCli(const IDPresupuesto : Integer; const CopiarDetalles: Boolean = True) : Boolean; overload;
var var
APresupuesto : IBizPresupuestoCliente; APresupuesto : IBizPresupuestoCliente;
begin begin
@ -215,13 +207,13 @@ begin
Inicializar; Inicializar;
APresupuesto := APresupuestosClienteController.Buscar(IDPresupuesto); APresupuesto := APresupuestosClienteController.Buscar(IDPresupuesto);
Result := GenerarFacturaCli(APresupuesto); Result := GenerarFacturaCli(APresupuesto, CopiarDetalles);
if Assigned(APresupuestosClienteController) then if Assigned(APresupuestosClienteController) then
Finalizar; Finalizar;
end; end;
function GenerarFacturaCli(APresupuestos : IBizPresupuestoCliente) : Boolean; overload; function GenerarFacturaCli(APresupuestos : IBizPresupuestoCliente; const CopiarDetalles: Boolean = True) : Boolean; overload;
var var
ARespuesta : Integer; ARespuesta : Integer;
AFacturasNuevas : IBizFacturaCliente; AFacturasNuevas : IBizFacturaCliente;
@ -238,8 +230,8 @@ begin
APresupuestos.DataTable.Active := True; APresupuestos.DataTable.Active := True;
try try
AFacturasNuevas := AFacturasClienteController.Nuevo(False); AFacturasNuevas := AFacturasClienteController.Nuevo(False);
if GenerarFacturas(AFacturasNuevas, APresupuestos) then if GenerarFacturas(AFacturasNuevas, APresupuestos, CopiarDetalles) then
begin begin
if AFacturasNuevas.DataTable.RecordCount = 1 then if AFacturasNuevas.DataTable.RecordCount = 1 then
ShowInfoMessage('La factura se ha dado de alta con el código ' + AFacturasNuevas.REFERENCIA) ShowInfoMessage('La factura se ha dado de alta con el código ' + AFacturasNuevas.REFERENCIA)
@ -288,7 +280,7 @@ begin
} }
end; end;
function GenerarFacturas(AFacturas : IBizFacturaCliente; AListaPresupuestos : IBizPresupuestoCliente): Boolean; function GenerarFacturas(AFacturas : IBizFacturaCliente; AListaPresupuestos : IBizPresupuestoCliente; const CopiarDetalles: Boolean = True): Boolean;
var var
AFacturaActual : IBizFacturaCliente; AFacturaActual : IBizFacturaCliente;
APresupuestosController : IPresupuestosClienteController; APresupuestosController : IPresupuestosClienteController;
@ -310,9 +302,6 @@ begin
if not AListaPresupuestos.DataTable.Active then if not AListaPresupuestos.DataTable.Active then
AListaPresupuestos.DataTable.Active := True; AListaPresupuestos.DataTable.Active := True;
// ShowHourglassCursor;
// Application.ProcessMessages;
APresupuestosController := TPresupuestosClienteController.Create; APresupuestosController := TPresupuestosClienteController.Create;
try try
// Ordenar por fecha de albaran // Ordenar por fecha de albaran
@ -337,69 +326,66 @@ begin
APresupuestosController.RecuperarCliente(AListaPresupuestos); APresupuestosController.RecuperarCliente(AListaPresupuestos);
AFacturas.Cliente := AListaPresupuestos.Cliente; 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; AFacturaActual := AFacturas;
end; end;
// Ya tengo la factura. Le añado los conceptos del presupuesto // Ya tengo la factura. Le añado los conceptos del presupuesto
AFacturaActual.Detalles.DataTable.Last; 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 //Se pone la referencia del presupuesto y el total y nos olvidamos de los detalles
Self.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_CONCEPTO); if not CopiarDetalles then
with AFacturaActual.Detalles do
begin begin
Edit; AFacturasClienteController.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_CONCEPTO);
CONCEPTO := 'Porte del presupuesto'; with AFacturaActual.Detalles do
CANTIDAD := 1; begin
IMPORTE_UNIDAD := AListaPresupuestos.IMPORTE_PORTE; Edit;
Post; CONCEPTO := 'Presupuesto ' + AListaPresupuestos.REFERENCIA + ' del ' + DateToStr(AListaPresupuestos.FECHA_PRESUPUESTO);
end; 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 //En el caso de tener porte el presupuesto se añade una fila con el importe
AFacturasClienteController.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_SUBTOTAL); if (AListaPresupuestos.IMPORTE_PORTE > 0) then
//Self.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_SUBTOTAL); begin
with AFacturaActual.Detalles do AFacturasClienteController.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_CONCEPTO);
begin with AFacturaActual.Detalles do
Edit; begin
CONCEPTO := 'Total del presupuesto ' + AListaPresupuestos.REFERENCIA; Edit;
Post; 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; end;
// Añado una línea en blanco // Añado una línea en blanco
AFacturasClienteController.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_CONCEPTO); AFacturasClienteController.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_CONCEPTO);
// Self.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_CONCEPTO);
with AFacturaActual.Detalles do with AFacturaActual.Detalles do
begin begin
Edit; Edit;
@ -410,7 +396,6 @@ begin
// Guardo la factura que acabo de generar o editar // Guardo la factura que acabo de generar o editar
AFacturaActual.CalcularImporteTotal; AFacturaActual.CalcularImporteTotal;
AFacturasClienteController.Guardar(AFacturaActual); AFacturasClienteController.Guardar(AFacturaActual);
// Self.Guardar(AFacturaActual);
// Asocio la factura con el presupuesto // Asocio la factura con el presupuesto
AListaPresupuestos.Edit; AListaPresupuestos.Edit;
AListaPresupuestos.ID_FACTURA := AFacturaActual.ID; AListaPresupuestos.ID_FACTURA := AFacturaActual.ID;
@ -422,8 +407,7 @@ begin
Result := True; Result := True;
finally finally
APresupuestosController := NIL; APresupuestosController := NIL;
// HideHourglassCursor
end; end;
end; end;
end. end.