FactuGES2/Source/Modulos/Relaciones/Contratos de cliente - Pedidos de proveedor/uGenerarPedidosProvUtils.pas
roberto 4952e773f4 Se cambia informe de pedidos de proveedor para incluir el contrato de cliente relacionado para luego en factura de proveedor no tener tanto lio.
Se copia del contrato de cliente la referencia del cliente para añadirla a la referencia del pedido de proveedor, luego podrán modificarla o no.

git-svn-id: https://192.168.0.254/svn/Proyectos.Acana_FactuGES2/trunk@670 f4e31baf-9722-1c47-927c-6f952f962d4b
2018-10-04 09:06:53 +00:00

223 lines
7.9 KiB
ObjectPascal

unit uGenerarPedidosProvUtils;
interface
uses
Windows, SysUtils, Classes, pngimage, JSDialog,
uBizContratosCliente, uBizPedidosProveedor;
type
TdmGenerarPedidosProv = class(TDataModule)
JsListaPedidosGenerados: TJSDialog;
end;
function GenerarPedidoProv(const IDContrato : Integer; ACopiarDetalles: Boolean) : Boolean; overload;
function GenerarPedidoProv(AContrato : IBizContratoCliente; var APedido: IBizPedidoProveedor; ACopiarDetalles: Boolean) : Boolean; overload;
// function ElegirPedidoYGenerarAlbaranCli(var IDAlbaran: Integer) : Boolean;
// function ElegirContratoYGenerarAlbaranCli(var IDAlbaran: Integer) : Boolean;
implementation
{$R *.dfm}
uses
uDialogUtils, uBizDetallesContratoCliente, uBizDetallesPedidoProveedor,
uContratosClienteController, uPedidosProveedorController, uClientesController,
uDetallesPedidoProveedorController, uControllerDetallesBase,
uBizContactos, schPedidosProveedorClient_Intf,
schContratosClienteClient_Intf, uBizDetallesPresupuestoCliente;
var
dmGenerarPedidosProv: TdmGenerarPedidosProv;
AContratosClienteController : IContratosClienteController;
APedidosProveedorController : IPedidosProveedorController;
AClientesController : IClientesController;
{ Métodos auxiliares }
procedure CopiarContratoAPedido(AContrato: IBizContratoCliente; APedido : IBizPedidoProveedor);
begin
if not Assigned(APedido) then
raise Exception.Create ('Pedido no asignado (CopiarContratoAPedido)');
if not Assigned(AContrato) then
raise Exception.Create ('Contrato no asignado (CopiarContratoAPedido)');
if not AContrato.DataTable.Active then
AContrato.DataTable.Active := True;
// El pedido tiene que venir ya abierto y posicionado donde hay que copiar
APedido.ID_CONTRATO_CLIENTE := AContrato.ID;
// Lo dejamos listo para que se localize la subcuenta contable asociada al cliente
// APedidosProveedorController.RecuperarCliente(APedido);
// APedido.Cliente.Open;
// APedido.NIF_CIF := AContrato.NIF_CIF;
APedido.ID_ALMACEN := 0;
APedido.ID_DIRECCION_CLIENTE := 0;
APedido.NOMBRE_CLIENTE := AContrato.NOMBRE;
APedido.CALLE := AContrato.CALLE;
APedido.POBLACION := AContrato.POBLACION;
APedido.PROVINCIA := AContrato.PROVINCIA;
APedido.CODIGO_POSTAL := AContrato.CODIGO_POSTAL;
APedido.PERSONA_CONTACTO := AContrato.PERSONA_CONTACTO;
APedido.TELEFONO := AContrato.TELEFONO;
APedido.DESCRIPCION_GENERAL := AContrato.REFERENCIA_CLIENTE;
// APedido.DataTable.FieldByName(fld_FacturasClientePLAZO_ENTREGA).AsVariant := AContrato.DataTable.FieldByName(fld_ContratosClientePLAZO_ENTREGA).AsVariant;
// APedido.DataTable.FieldByName(fld_AlbaranesClienteOBSERVACIONES).AsVariant := AContrato.DataTable.FieldByName(fld_ContratosClienteOBSERVACIONES).AsVariant;
// APedido.IMPORTE_NETO := AContrato.IMPORTE_NETO;
// APedido.IMPORTE_PORTE := AContrato.IMPORTE_PORTE;
// APedido.DESCUENTO := AContrato.DESCUENTO;
// APedido.IMPORTE_DESCUENTO := AContrato.IMPORTE_DESCUENTO;
// APedido.BASE_IMPONIBLE := AContrato.BASE_IMPONIBLE;
// APedido.ID_TIPO_IVA := AContrato.ID_TIPO_IVA;
// APedido.IVA := AContrato.IVA;
// APedido.IMPORTE_IVA := AContrato.IMPORTE_IVA;
// APedido.IMPORTE_TOTAL := AContrato.IMPORTE_TOTAL;
// APedido.ID_TIENDA := AContrato.ID_TIENDA;
// APedido.ID_VENDEDOR := AContrato.ID_VENDEDOR;
// APedido.RECARGO_EQUIVALENCIA := AContrato.RECARGO_EQUIVALENCIA;
// APedido.RE := AContrato.RE;
// APedido.IMPORTE_RE := AContrato.IMPORTE_RE;
// APedido.TIPO_FACTURA := AContrato.TIPO_CONTRATO;
end;
procedure CopiarDetallesAPedido(
AContrato: IBizContratoCliente;
APedido: IBizPedidoProveedor;
AArticulos: IBizDetallesContratoCliente);
var
i : integer;
ADetalles : IBizDetallesPedidoProveedor;
ADetallesController : IDetallesPedidoProveedorController;
begin
if not Assigned(APedido) then
raise Exception.Create ('Albarán no asignada (CopiarDetallesAPedido)');
if not Assigned(AContrato) then
raise Exception.Create ('Contrato no asignado (CopiarDetallesAPedido)');
if not Assigned(AArticulos) then
raise Exception.Create ('Artículos no asignado (CopiarDetallesAPedido)');
if not AArticulos.DataTable.Active then
AArticulos.DataTable.Active := True;
// El contrato tiene que venir ya abierto y posicionado donde hay que copiar
ADetalles := APedido.Detalles;
ADetallesController := TDetallesPedidoProveedorController.Create;
try
//OJO IMPORTANTE
//Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para
//obligarle siempre a recalcular los detalles una sola vez
ADetallesController.BeginUpdate(ADetalles);
AArticulos.DataTable.First;
for i := 0 to AArticulos.DataTable.RecordCount - 1 do
begin
if (AArticulos.TIPO_DETALLE = TIPO_DETALLE_CONCEPTO) then
begin
ADetallesController.Add(ADetalles, AArticulos.TIPO_DETALLE);
ADetalles.Edit;
// ADetalles.REFERENCIA := AArticulos.REFERENCIA;
ADetalles.ID_ARTICULO := AArticulos.ID_ARTICULO;
if (AArticulos.PROPIEDAD <> '') then
ADetalles.CONCEPTO := AArticulos.PROPIEDAD + ': '+ AArticulos.CONCEPTO
else
ADetalles.CONCEPTO := AArticulos.CONCEPTO;
if not AArticulos.CANTIDADIsNull then
ADetalles.CANTIDAD := AArticulos.CANTIDAD;
if not AArticulos.IMPORTE_UNIDADIsNull then
ADetalles.IMPORTE_UNIDAD := AArticulos.IMPORTE_UNIDAD;
if not AArticulos.IMPORTE_TOTALIsNull then
ADetalles.IMPORTE_TOTAL := AArticulos.IMPORTE_TOTAL;
if not AArticulos.DESCUENTOIsNull then
ADetalles.DESCUENTO := AArticulos.DESCUENTO;
if not AArticulos.IMPORTE_PORTEIsNull then
ADetalles.IMPORTE_PORTE := AArticulos.IMPORTE_PORTE;
ADetalles.VISIBLE := AArticulos.VISIBLE;
// ADetalles.REFERENCIA_PROVEEDOR := AArticulos.REFERENCIA_PROVEEDOR;
ADetalles.Post;
end;
AArticulos.Next;
end;
finally
ADetallesController.EndUpdate(ADetalles);
ADetallesController := NIL;
end;
end;
procedure Inicializar;
begin
dmGenerarPedidosProv := TdmGenerarPedidosProv.Create(nil);
AContratosClienteController := TContratosClienteController.Create;
APedidosProveedorController := TPedidosProveedorController.Create;
AClientesController := TClientesController.Create;
end;
procedure Finalizar;
begin
FreeAndNIL(dmGenerarPedidosProv);
AContratosClienteController := nil;
APedidosProveedorController := nil;
AClientesController := nil;
end;
function GenerarPedidoProv(const IDContrato : Integer; ACopiarDetalles: Boolean) : Boolean; overload;
var
AContrato : IBizContratoCliente;
APedido : IBizPedidoProveedor;
begin
Result := False;
try
if not Assigned(AContratosClienteController) then
Inicializar;
AContrato := AContratosClienteController.Buscar(IDContrato);
if Assigned(AContrato) then
Result := GenerarPedidoProv(AContrato, APedido, ACopiarDetalles);
finally
if Assigned(AContratosClienteController) then
Finalizar;
end;
end;
function GenerarPedidoProv(AContrato : IBizContratoCliente; var APedido: IBizPedidoProveedor; ACopiarDetalles: Boolean) : Boolean; overload;
var
ARespuesta : Integer;
begin
APedido := NIL;
if not Assigned(AContrato) then
raise Exception.Create('Contrato de cliente no asignado (GenerarPedidoProv)');
if not AContrato.DataTable.Active then
AContrato.DataTable.Active := True;
if not Assigned(AContratosClienteController) then
Inicializar;
try
APedido := APedidosProveedorController.Nuevo;
CopiarContratoAPedido(AContrato, APedido);
if ACopiarDetalles then
CopiarDetallesAPedido(AContrato, APedido, AContrato.Detalles);
APedidosProveedorController.Ver(APedido);
Result := True;
finally
if Assigned(AContratosClienteController) then
Finalizar;
end;
end;
end.