176 lines
6.1 KiB
ObjectPascal
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.
|