AbetoDesign_FactuGES2/Source/Modulos/Relaciones/Facturas de cliente - Facturas de Proveedor/uGenerarFacturasProvFacCliUtils.pas

176 lines
6.1 KiB
ObjectPascal

unit uGenerarFacturasProvFacCliUtils;
interface
uses
Windows, SysUtils, Classes, uBizFacturasCliente, pngimage, JSDialog, DB,
schFacturasProveedorClient_Intf, cxControls;
type
TdmGenerarFacturasProv = class(TDataModule)
JsListaFacturasGeneradas: TJSDialog;
end;
function GenerarFacturaProvEnGraden(const ID_FACTURA_CLI : Integer) : Boolean; overload;
function GenerarFacturaProvEnGraden(AFacturasCliente : IBizFacturaCliente) : Boolean; overload;
implementation
{$R *.dfm}
uses
uDialogUtils, uBizFacturasProveedor, uDataTableUtils,
uBizDetallesFacturaCliente, uBizContactos, uFactuGES_App,
uFacturasProveedorController, uDetallesFacturaClienteController,
uFacturasClienteController;
var
dmGenerarFacturasProv: TdmGenerarFacturasProv;
AFacturasClienteController : IFacturasClienteController;
AFacturasProveedorController : IFacturasProveedorController;
ADetallesFacturasClienteController : IDetallesFacturaClienteController;
procedure Inicializar;
begin
dmGenerarFacturasProv := TdmGenerarFacturasProv.Create(nil);
AFacturasClienteController := TFacturasClienteController.Create;
AFacturasProveedorController := TFacturasProveedorController.Create;
ADetallesFacturasClienteController := TDetallesFacturaClienteController.Create;
end;
procedure Finalizar;
begin
FreeAndNIL(dmGenerarFacturasProv);
AFacturasClienteController := nil;
AFacturasProveedorController := nil;
ADetallesFacturasClienteController := nil;
end;
function GenerarFacturaProvEnGraden(const ID_FACTURA_CLI : Integer) : Boolean; overload;
var
AFacturaCliente : IBizFacturaCliente;
begin
Result := False;
try
if not Assigned(AFacturasClienteController) then
Inicializar;
AFacturaCliente := AFacturasClienteController.Buscar(ID_FACTURA_CLI);
if Assigned(AFacturaCliente) then
Result := GenerarFacturaProvEnGraden(AFacturaCliente);
if Assigned(AFacturasClienteController) then
Finalizar;
finally
AFacturaCliente := NIL;
end;
end;
function GenerarFacturaProvEnGraden(AFacturasCliente : IBizFacturaCliente) : Boolean; overload;
var
AFacturaNueva : IBizFacturaProveedor;
AProveedor : IBizProveedor;
begin
Result := False;
ShowHourglassCursor;
if not Assigned(AFacturasProveedorController) then
Inicializar;
if not Assigned(AFacturasCliente) then
raise Exception.Create('Factura de cliente no asignado (GenerarFacturaProvEnGraden)');
if not AFacturasCliente.DataTable.Active then
AFacturasCliente.DataTable.Active := True;
try
//Preparamos el proveedor
AProveedor := (AFacturasProveedorController.ProveedorController.BuscarSinFiltroEmpresa(CTE_PROVEEDOR_ABETO_PARA_GRADEN) as IBizProveedor);
if not AProveedor.DataTable.Active then
AProveedor.DataTable.Active := True;
with AFacturasCliente.DataTable do
begin
dmGenerarFacturasProv.JsListaFacturasGeneradas.Content.Clear;
First;
while not EOF do
begin
//Solo generaremos las facturas del cliente GRADEN
if (AFacturasCliente.ID_CLIENTE = CTE_CLIENTE_GRADEN_PARA_FABRICA)
and AFacturasCliente.FAC_PROV_GRADENIsNull then
begin
AFacturaNueva := AFacturasProveedorController.Nuevo;
AFacturaNueva.ID_EMPRESA := CTE_EMPRESA_GRADEN;
AFacturaNueva.Proveedor := AProveedor;
AFacturaNueva.ID_TIPO_FACTURA := CTE_TIPO_FACTURA_PROV_ABETO;
AFacturaNueva.ID_FAC_CLI_ABETO := AFacturasCliente.ID;
AFacturaNueva.REFERENCIA_PROVEEDOR := AFacturasCliente.REFERENCIA;
if (AFacturasCLiente.FECHA_FACTURA <> 0) then
AFacturaNueva.FECHA_FACTURA := AFacturasCLiente.FECHA_FACTURA;
if (AFacturasCLiente.FECHA_VENCIMIENTO <> 0) then
AFacturaNueva.FECHA_VENCIMIENTO := AFacturasCLiente.FECHA_VENCIMIENTO;
AFacturaNueva.IMPORTE_NETO := AFacturasCliente.IMPORTE_NETO;
AFacturaNueva.IMPORTE_PORTE := AFacturasCliente.IMPORTE_PORTE;
AFacturaNueva.DESCUENTO := AFacturasCliente.DESCUENTO;
AFacturaNueva.IMPORTE_DESCUENTO := AFacturasCliente.IMPORTE_DESCUENTO;
AFacturaNueva.BASE_IMPONIBLE := AFacturasCliente.BASE_IMPONIBLE;
AFacturaNueva.IVA := AFacturasCliente.IVA;
AFacturaNueva.IMPORTE_IVA := AFacturasCliente.IMPORTE_IVA;
AFacturaNueva.IMPORTE_TOTAL := AFacturasCliente.IMPORTE_TOTAL;
AFacturaNueva.DataTable.FieldByName(fld_facturasProveedorOBSERVACIONES).AsVariant := AFacturasCliente.DataTable.FieldByName(fld_facturasProveedorOBSERVACIONES).AsVariant;
DuplicarRegistros(AFacturasCliente.Detalles.DataTable, AFacturaNueva.Detalles.DataTable, mdrTodos);
if AFacturasProveedorController.Guardar(AFacturaNueva) then
begin
if not (AFacturasCliente.State in dsEditModes) then
AFacturasCliente.Datatable.Edit;
AFacturasCliente.FAC_PROV_GRADEN := 1;
AFacturasCliente.Datatable.Post;
dmGenerarFacturasProv.JsListaFacturasGeneradas.Content.Add(AFacturasCliente.REFERENCIA + ': Se ha creado la factura de proveedor ' + AFacturaNueva.REFERENCIA + ' en la empresa Graden S.L.');
end;
end
else
begin
if AFacturasCliente.FAC_PROV_GRADENIsNull then
dmGenerarFacturasProv.JsListaFacturasGeneradas.Content.Add(AFacturasCliente.REFERENCIA + ': No se aplica, factura no es de Graden')
else
dmGenerarFacturasProv.JsListaFacturasGeneradas.Content.Add(AFacturasCliente.REFERENCIA + ': No se aplica, ya tiene una factura generada en Graden');
end;
AFacturaNueva := NIL;
Next;
end;
ApplyUpdates;
dmGenerarFacturasProv.JsListaFacturasGeneradas.Execute;
Result := True;
end;
finally
AFacturaNueva := NIL;
if Assigned(AFacturasProveedorController) then
Finalizar;
HideHourglassCursor;
end;
end;
end.