unit uGenerarFacturasProvUtils;

interface

uses
 Windows, SysUtils, Classes, uBizAlbaranesProveedor, pngimage, JSDialog;

type
  TdmGenerarFacturasProv = class(TDataModule)
    JsListaFacturasGeneradas: TJSDialog;
  end;

  function GenerarFacturaProv(const IDAlbaran : Integer) : Boolean; overload;
  function GenerarFacturaProv(AAlbaranes : IBizAlbaranProveedor) : Boolean; overload;
  function GenerarFacturaProv : Boolean; overload;

implementation

{$R *.dfm}

uses
  uDialogUtils,
  uBizDetallesAlbaranProveedor,
  uAlbaranesProveedorController, uDetallesAlbaranProveedorController,
  uFacturasProveedorController, uBizFacturasProveedor, uBizDetallesFacturaProveedor;

//  ,
//  , uProveedoresController,
//  , uControllerDetallesBase,


//  , uBizContactos, schPedidosClienteClient_Intf,
//  schAlbaranesProveedorClient_Intf;

var
  dmGenerarFacturasProv: TdmGenerarFacturasProv;
  AAlbaranesProveedorController : IAlbaranesProveedorController;
  ADetallesAlbaranesProveedorController : IDetallesAlbaranProveedorController;
  AFacturasProveedorController : IFacturasProveedorController;
//  AProveedoresController : IProveedoresController;

{ Métodos auxiliares }

procedure Inicializar;
begin
  dmGenerarFacturasProv := TdmGenerarFacturasProv.Create(nil);
  AAlbaranesProveedorController := TAlbaranesProveedorController.Create;
  ADetallesAlbaranesProveedorController := TDetallesAlbaranProveedorController.Create;
  AFacturasProveedorController := TFacturasProveedorController.Create;
//  AProveedoresController := TProveedoresController.Create;
end;

procedure Finalizar;
begin
  FreeAndNIL(dmGenerarFacturasProv);
  AAlbaranesProveedorController := nil;
  ADetallesAlbaranesProveedorController := nil;
  AFacturasProveedorController := nil;
//  AProveedoresController := nil;
end;


function GenerarFacturaProv(const IDAlbaran : Integer) : Boolean; overload;
var
  AAlbaran : IBizAlbaranProveedor;
begin
  Result := False;
  if not Assigned(AAlbaranesProveedorController) then
     Inicializar;

  AAlbaran := AAlbaranesProveedorController.Buscar(IDAlbaran);
  Result := GenerarFacturaProv(AAlbaran);

  if Assigned(AAlbaranesProveedorController) then
     Finalizar;
end;

function GenerarFacturaProv(AAlbaranes : IBizAlbaranProveedor) : Boolean; overload;
var
  ARespuesta : Integer;
  AFacturasNuevas : IBizFacturaProveedor;
//  AArticulos: IBizPedidoClienteArticulosPend;
  i: Integer;
begin
{
  Result := False;
  if not Assigned(AAlbaranesProveedorController) then
     Inicializar;

  if not Assigned(AAlbaranes) then
     raise Exception.Create('Albarán de proveedor no asignado (GenerarFacturaProv)');

  if not AAlbaranes.DataTable.Active then
     AAlbaranes.DataTable.Active := True;

  try
     AFacturasNuevas := AFacturasProveedorController.Nuevo(False);
     if AFacturasProveedorController.Anadir(AFacturasNuevas, AAlbaranes) then
     begin
       if AFacturasNuevas.DataTable.RecordCount = 1 then
          AFacturasProveedorController.Ver(AFacturasNuevas)
       else begin
          with dmGenerarFacturasProv.JsListaFacturasGeneradas.Content do
          begin
            Clear;
            AFacturasNuevas.DataTable.Last;
            for i := 0 to AFacturasNuevas.DataTable.RecordCount - 1 do
            begin
              if Length(AFacturasNuevas.REFERENCIA) > 0 then
                  Add(AFacturasNuevas.REFERENCIA + ': ' + AFacturasNuevas.NOMBRE);
              AFacturasNuevas.DataTable.Prior;
            end;
          end;
          dmGenerarFacturasProv.JsListaFacturasGeneradas.Execute;
        end;
//          actRefrescar.Execute;
      end;
   finally
     AFacturasNuevas := NIL;
   end;
}   
end;

function GenerarFacturaProv : Boolean; overload;
var
  AAlbaranes : IBizAlbaranProveedor;
begin
  Result := False;
  if not Assigned(AAlbaranesProveedorController) then
     Inicializar;

  AAlbaranes := AAlbaranesProveedorController.ElegirAlbaranes(AAlbaranesProveedorController.BuscarSinFacturar,
                'Elija el albarán o albaranes de proveedor que desea utilizar para dar de alta la factura.'
                + #10#13 + 'Si elige albaranes de proveedores diferentes se dará de alta una factura por cada uno de ellos.' , True);

  Result := GenerarFacturaProv(AAlbaranes);

  if Assigned(AAlbaranesProveedorController) then
     Finalizar;
end;

end.
