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:
parent
aa2c5dbd72
commit
7156106993
@ -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
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user