unit uGenerarAlbaranesCliFacCliUtils;

interface

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

type
  TdmGenerarAlbaranesCli = class(TDataModule)
  end;

  function GenerarAlbaranCli(AFactura : IBizFacturaCliente) : Boolean; overload;

implementation

{$R *.dfm}

uses
  uDialogUtils, uDataTableUtils,
  uBizAlbaranesCliente,
  uAlbaranesClienteController,
  uFacturasClienteController;

var
  dmGenerarAlbaranesCli: TdmGenerarAlbaranesCli;
  AFacturasClienteController : IFacturasClienteController;
  AAlbaranesClienteController : IAlbaranesClienteController;

procedure Inicializar;
begin
  dmGenerarAlbaranesCli := TdmGenerarAlbaranesCli.Create(nil);
  AFacturasClienteController := TFacturasClienteController.Create;
  AAlbaranesClienteController := TAlbaranesClienteController.Create;
end;

procedure Finalizar;
begin
  FreeAndNIL(dmGenerarAlbaranesCli);
  AFacturasClienteController := nil;
  AAlbaranesClienteController := nil;
end;

function GenerarAlbaranCli(AFactura : IBizFacturaCliente) : Boolean; overload;
var
  AAlbaranNuevo : IBizAlbaranCliente;
begin
  Result := False;

  if not Assigned(AAlbaranesClienteController) then
     Inicializar;

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

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

  try
     AAlbaranNuevo := AAlbaranesClienteController.Nuevo;

      with AAlbaranNuevo do
      begin
        TIPO := CTE_TIPO_ALBARAN_DEV;
        ID_CLIENTE := AFactura.ID_CLIENTE;
        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 AAlbaranesClienteController.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.
