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.