2023-02-10 17:16:11 +00:00
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;
2023-12-04 14:04:07 +00:00
if ( AFacturasCLiente. FECHA_FACTURA < > 0 ) then
AFacturaNueva. FECHA_FACTURA : = AFacturasCLiente. FECHA_FACTURA;
if ( AFacturasCLiente. FECHA_VENCIMIENTO < > 0 ) then
AFacturaNueva. FECHA_VENCIMIENTO : = AFacturasCLiente. FECHA_VENCIMIENTO;
2023-02-10 17:16:11 +00:00
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 .