unit uGenerarAlbaranesProvFacProvUtils;

interface

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

type
  TdmGenerarAlbaranesProv = class(TDataModule)
  end;

  function GenerarAlbaranProv(AFactura : IBizFacturaProveedor) : Boolean; overload;

implementation

{$R *.dfm}

uses
  uDialogUtils, uDataTableUtils,
  uBizAlbaranesProveedor,
  uFacturasProveedorController,
  uAlbaranesProveedorController;

var
  dmGenerarAlbaranesProv: TdmGenerarAlbaranesProv;
  AAlbaranesProveedorController : IAlbaranesProveedorController;
  AFacturasProveedorController : IFacturasProveedorController;

procedure Inicializar;
begin
  dmGenerarAlbaranesProv := TdmGenerarAlbaranesProv.Create(nil);
  AAlbaranesProveedorController := TAlbaranesProveedorController.Create;
  AFacturasProveedorController := TFacturasProveedorController.Create;
end;

procedure Finalizar;
begin
  FreeAndNIL(dmGenerarAlbaranesProv);
  AAlbaranesProveedorController := nil;
  AFacturasProveedorController := nil;
end;

function GenerarAlbaranProv(AFactura : IBizFacturaProveedor) : Boolean; overload;
var
  AAlbaranNuevo : IBizAlbaranProveedor;
begin
  Result := False;

  if not Assigned(AAlbaranesProveedorController) then
     Inicializar;

  if not Assigned(AFactura) then
     raise Exception.Create('Factura de proveedor no asignada (GenerarAlbaranProv)');

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

  try
     AAlbaranNuevo := AAlbaranesProveedorController.Nuevo;

      with AAlbaranNuevo do
      begin
        TIPO := CTE_TIPO_ALBARAN_DEV;
        ID_PROVEEDOR := AFactura.ID_PROVEEDOR;
        CALLE := AFactura.CALLE;
        CODIGO_POSTAL := AFactura.CODIGO_POSTAL;
        POBLACION := AFactura.POBLACION;
        PROVINCIA := AFactura.PROVINCIA;
  //  AAlbaran.PERSONA_CONTACTO := AFactura.PERSONA_CONTACTO;
  //  AAlbaran.TELEFONO := AFactura.TELEFONO;
        IMPORTE_NETO := AFactura.IMPORTE_NETO;
        IMPORTE_PORTE := AFactura.IMPORTE_PORTE;
        DESCUENTO := AFactura.DESCUENTO;
        IMPORTE_DESCUENTO := AFactura.IMPORTE_DESCUENTO;
        BASE_IMPONIBLE := AFactura.BASE_IMPONIBLE;
        IVA := AFactura.IVA;
        IMPORTE_IVA := AFactura.IMPORTE_IVA;
        IMPORTE_TOTAL := AFactura.IMPORTE_TOTAL;
  //  AAlbaran.DataTable.FieldByName(fld_AlbaranesProveedorOBSERVACIONES).AsVariant := AFactura.DataTable.FieldByName(fld_PedidosProveedorOBSERVACIONES).AsVariant;
        ID_FORMA_PAGO := AFactura.ID_FORMA_PAGO;
        ID_FACTURA := AFactura.ID;
      end;

    DuplicarRegistros(AFactura.Detalles.DataTable, AAlbaranNuevo.Detalles.DataTable, mdrTodos);


    //Sustituir por if de guardar
    if AAlbaranesProveedorController.Guardar(AAlbaranNuevo) then
       ShowInfoMessage('La orden de devolución se ha dado de alta con el código ' + AAlbaranNuevo.REFERENCIA);

  finally
    AAlbaranNuevo := Nil;
  end;
end;

end.
