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'
ClientWidth = 674
ExplicitWidth = 682
ExplicitHeight = 240
PixelsPerInch = 96
TextHeight = 13
inherited JvNavPanelHeader: TJvNavPanelHeader

View File

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

View File

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