unit uGenerarFacturasProvPedProvUtils;

interface

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

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

  function GenerarFacturaProv(const IDPedido : Integer) : Boolean; overload;
  function GenerarFacturaProv(APedidos : IBizPedidoProveedor) : Boolean; overload;
  function GenerarFacturaProv : Boolean; overload;

implementation

{$R *.dfm}

uses
  uDialogUtils,
  uBizDetallesPedidoProveedor,
  uPedidosProveedorController, uDetallesPedidoProveedorController,
  uFacturasProveedorController, uBizFacturasProveedor, uBizDetallesFacturaProveedor;

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


//  , uBizContactos, schPedidosClienteClient_Intf,
//  schPedidosProveedorClient_Intf;

var
  dmGenerarFacturasProv: TdmGenerarFacturasProv;
  APedidosProveedorController : IPedidosProveedorController;
  ADetallesPedidosProveedorController : IDetallesPedidoProveedorController;
  AFacturasProveedorController : IFacturasProveedorController;
//  AProveedoresController : IProveedoresController;

{ Métodos auxiliares }

procedure Inicializar;
begin
  dmGenerarFacturasProv := TdmGenerarFacturasProv.Create(nil);
  APedidosProveedorController := TPedidosProveedorController.Create;
  ADetallesPedidosProveedorController := TDetallesPedidoProveedorController.Create;
  AFacturasProveedorController := TFacturasProveedorController.Create;
//  AProveedoresController := TProveedoresController.Create;
end;

procedure Finalizar;
begin
  FreeAndNIL(dmGenerarFacturasProv);
  APedidosProveedorController := nil;
  ADetallesPedidosProveedorController := nil;
  AFacturasProveedorController := nil;
//  AProveedoresController := nil;
end;


function GenerarFacturaProv(const IDPedido : Integer) : Boolean; overload;
var
  APedido : IBizPedidoProveedor;
begin
  Result := False;
  if not Assigned(APedidosProveedorController) then
     Inicializar;

  APedido := APedidosProveedorController.Buscar(IDPedido);
  Result := GenerarFacturaProv(APedido);

  if Assigned(APedidosProveedorController) then
     Finalizar;
end;

function GenerarFacturaProv(APedidos : IBizPedidoProveedor) : Boolean; overload;
var
  ARespuesta : Integer;
  AFacturasNuevas : IBizFacturaProveedor;
//  AArticulos: IBizPedidoClienteArticulosPend;
  i: Integer;
begin
  Result := False;
  if not Assigned(APedidosProveedorController) then
     Inicializar;

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

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

  try
     AFacturasNuevas := AFacturasProveedorController.Nuevo(False);
     if AFacturasProveedorController.Anadir(AFacturasNuevas, APedidos.ID) 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
  APedidos : IBizPedidoProveedor;
begin
{
  Result := False;
  if not Assigned(APedidosProveedorController) then
     Inicializar;

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

  Result := GenerarFacturaProv(APedidos);

  if Assigned(APedidosProveedorController) then
     Finalizar;
}     
end;

end.
