git-svn-id: https://192.168.0.254/svn/Proyectos.AbetoDesign_FactuGES/trunk@155 93f398dd-4eb6-7a46-baf6-13f46f578da2
341 lines
12 KiB
ObjectPascal
341 lines
12 KiB
ObjectPascal
unit uGenerarContratosCliUtils;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, SysUtils, Classes, pngimage, JSDialog,
|
|
uBizPresupuestosCliente, uBizContratosCliente;
|
|
|
|
type
|
|
TdmGenerarContratosCli = class(TDataModule)
|
|
JsListaContratosGenerados: TJSDialog;
|
|
end;
|
|
|
|
function GenerarContratoCli(const IDPresupuesto : Integer; const APreguntaMostrarContrato : Boolean = True) : Boolean; overload;
|
|
function GenerarContratoCli(APresupuesto : IBizPresupuestoCliente; var AContrato: IBizContratoCliente;
|
|
const APreguntaMostrarContrato : Boolean = True) : Boolean; overload;
|
|
function GenerarContratosCli : Boolean; overload;
|
|
function GenerarContratosCli(APresupuestos : IBizPresupuestoCliente) : Boolean; overload;
|
|
// function ElegirPedidoYGenerarAlbaranCli(var IDAlbaran: Integer) : Boolean;
|
|
|
|
implementation
|
|
|
|
{$R *.dfm}
|
|
|
|
uses
|
|
uDialogUtils, uBizDetallesPresupuestoCliente, uBizDetallesContratoCliente,
|
|
uPresupuestosClienteController, uContratosClienteController, uClientesController,
|
|
uDetallesContratoClienteController, uControllerDetallesBase,
|
|
uBizContactos, schPresupuestosClienteClient_Intf,
|
|
schContratosClienteClient_Intf, uDireccionesContactoController,
|
|
uBizDireccionesContacto, uFactuGES_App;
|
|
|
|
var
|
|
dmGenerarContratosCli: TdmGenerarContratosCli;
|
|
APresupuestosClienteController : IPresupuestosClienteController;
|
|
AContratosClienteController : IContratosClienteController;
|
|
ADireccionesController : IDireccionesContactoController;
|
|
AClientesController : IClientesController;
|
|
|
|
{ Métodos auxiliares }
|
|
procedure PreguntarMostrarContrato(AContrato : IBizContratoCliente);
|
|
var
|
|
ARespuesta : Integer;
|
|
begin
|
|
if not Assigned(AContrato) then
|
|
raise Exception.Create ('Contrato no asignado (PreguntaSiMostrarContrato)');
|
|
|
|
with dmGenerarContratosCli.JsListaContratosGenerados do
|
|
begin
|
|
Instruction.Text := 'Se ha generado el contrato';
|
|
|
|
Content.Clear;
|
|
Content.Add(Format('Se ha generado correctamente el contrato %s a partir del presupuesto de cliente' + #10#13,
|
|
[AContrato.REFERENCIA]));
|
|
Execute;
|
|
|
|
ARespuesta := CustomButtonResult;
|
|
case ARespuesta of
|
|
100 : begin
|
|
// Ver el albarán
|
|
AContratosClienteController.Ver(AContrato);
|
|
end;
|
|
200 : // Continuar;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure CopiarPresupuestoAContrato(APresupuesto: IBizPresupuestoCliente;
|
|
AContrato : IBizContratoCliente);
|
|
var
|
|
FDireccion: IBizDireccionesContacto;
|
|
|
|
begin
|
|
if not Assigned(AContrato) then
|
|
raise Exception.Create ('Contrato no asignado (CopiarPresupuestoAContrato)');
|
|
|
|
if not Assigned(APresupuesto) then
|
|
raise Exception.Create ('Presupuesto no asignado (CopiarPresupuestoAContrato)');
|
|
|
|
if not APresupuesto.DataTable.Active then
|
|
APresupuesto.DataTable.Active := True;
|
|
|
|
// El contrato tiene que venir ya abierto y posicionado donde hay que copiar
|
|
AContrato.ID_CLIENTE := APresupuesto.ID_CLIENTE;
|
|
AContrato.NIF_CIF := APresupuesto.NIF_CIF;
|
|
AContrato.NOMBRE := APresupuesto.NOMBRE;
|
|
|
|
APresupuestosClienteController.RecuperarCliente(APresupuesto);
|
|
APresupuesto.Cliente.Open;
|
|
FDireccion := ADireccionesController.Nuevo;
|
|
try
|
|
if (not APresupuesto.ID_DIRECCIONIsNull) and
|
|
(ADireccionesController.Localizar(APresupuesto.Cliente.Direcciones, APresupuesto.ID_DIRECCION)) then
|
|
ADireccionesController.CopiarDireccion(APresupuesto.Cliente.Direcciones, FDireccion)
|
|
else
|
|
ADireccionesController.CopiarDireccionFiscal(APresupuesto.Cliente, FDireccion);
|
|
|
|
AContrato.CALLE := FDireccion.CALLE;
|
|
AContrato.POBLACION := FDireccion.POBLACION;
|
|
AContrato.PROVINCIA := FDireccion.PROVINCIA;
|
|
AContrato.CODIGO_POSTAL := FDireccion.CODIGO_POSTAL;
|
|
finally
|
|
FDireccion := NIL;
|
|
end;
|
|
|
|
AContrato.TELEFONO := APresupuesto.Cliente.TELEFONO_1;
|
|
AContrato.MOVIL := APresupuesto.Cliente.MOVIL_1;
|
|
|
|
AContrato.PERSONA_CONTACTO := APresupuesto.PERSONA_CONTACTO;
|
|
AContrato.DataTable.FieldByName(fld_ContratosClientePLAZO_ENTREGA).AsVariant := APresupuesto.DataTable.FieldByName(fld_PresupuestosClientePLAZO_ENTREGA).AsVariant;
|
|
AContrato.DataTable.FieldByName(fld_ContratosClienteOBSERVACIONES).AsVariant := APresupuesto.DataTable.FieldByName(fld_PresupuestosClienteOBSERVACIONES).AsVariant;
|
|
AContrato.IMPORTE_NETO := APresupuesto.IMPORTE_NETO;
|
|
AContrato.IMPORTE_PORTE := APresupuesto.IMPORTE_PORTE;
|
|
AContrato.DESCUENTO := APresupuesto.DESCUENTO;
|
|
AContrato.IMPORTE_DESCUENTO := APresupuesto.IMPORTE_DESCUENTO;
|
|
AContrato.BASE_IMPONIBLE := APresupuesto.BASE_IMPONIBLE;
|
|
AContrato.ID_TIPO_IVA := APresupuesto.ID_TIPO_IVA;
|
|
AContrato.IVA := APresupuesto.IVA;
|
|
AContrato.IMPORTE_IVA := APresupuesto.IMPORTE_IVA;
|
|
AContrato.IMPORTE_TOTAL := APresupuesto.IMPORTE_TOTAL;
|
|
AContrato.ID_VENDEDOR := APresupuesto.ID_VENDEDOR;
|
|
AContrato.RECARGO_EQUIVALENCIA := APresupuesto.RECARGO_EQUIVALENCIA;
|
|
AContrato.RE := APresupuesto.RE;
|
|
AContrato.IMPORTE_RE := APresupuesto.IMPORTE_RE;
|
|
AContrato.TIPO_CONTRATO := APresupuesto.TIPO_PRESUPUESTO;
|
|
AContrato.REFERENCIA_CLIENTE := APresupuesto.REFERENCIA_CLIENTE;
|
|
AContrato.ID_FORMA_PAGO := APresupuesto.ID_FORMA_PAGO;
|
|
AContrato.DataTable.FieldByName(fld_ContratosClienteFORMA_PAGO).AsVariant := APresupuesto.DataTable.FieldByName(fld_PresupuestosClienteFORMA_PAGO).AsVariant;
|
|
end;
|
|
|
|
procedure CopiarDetallesAContrato(
|
|
APresupuesto: IBizPresupuestoCliente;
|
|
AContrato: IBizContratoCliente;
|
|
AArticulos: IBizDetallesPresupuestoCliente);
|
|
var
|
|
i : integer;
|
|
ADetalles : IBizDetallesContratoCliente;
|
|
ADetallesController : IDetallesContratoClienteController;
|
|
begin
|
|
if not Assigned(AContrato) then
|
|
raise Exception.Create ('Contrato no asignado (CopiarDetallesAContrato)');
|
|
|
|
if not Assigned(APresupuesto) then
|
|
raise Exception.Create ('Presupuesto no asignado (CopiarDetallesAContrato)');
|
|
|
|
if not Assigned(AArticulos) then
|
|
raise Exception.Create ('Artículos no asignado (CopiarDetallesAContrato)');
|
|
|
|
if not AArticulos.DataTable.Active then
|
|
AArticulos.DataTable.Active := True;
|
|
|
|
// El contrato tiene que venir ya abierto y posicionado donde hay que copiar
|
|
|
|
ADetalles := AContrato.Detalles;
|
|
ADetallesController := TDetallesContratoClienteController.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
|
|
//En el caso de tener algún capitulo de cocina vacio (cocina de presupuestos)
|
|
//se añade un capitulo de cocina con sus propiedades para el contrato
|
|
if ((AArticulos.TIPO_DETALLE = TIPO_DETALLE_TITULO)
|
|
and (AArticulos.TIPO_ARTICULO = TIPO_CAPITULO_C_VACIO)) then
|
|
ADetallesController.AnadirCapitulo(TIPO_CAPITULO_C,'MUEBLES DE COCINA ', False, ADetalles);
|
|
|
|
//En contratos ya no existirá ningún capitulo opcional todos sumarán
|
|
if (AArticulos.TIPO_DETALLE = TIPO_DETALLE_TITULO_OPCIONAL) then
|
|
ADetallesController.Add(ADetalles, TIPO_DETALLE_TITULO)
|
|
else
|
|
ADetallesController.Add(ADetalles, AArticulos.TIPO_DETALLE);
|
|
ADetalles.Edit;
|
|
ADetalles.REFERENCIA := AArticulos.REFERENCIA;
|
|
ADetalles.ID_ARTICULO := AArticulos.ID_ARTICULO;
|
|
ADetalles.TIPO_ARTICULO := AArticulos.TIPO_ARTICULO;
|
|
ADetalles.PROPIEDAD := AArticulos.PROPIEDAD;
|
|
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.VALORADO := AArticulos.VALORADO;
|
|
ADetalles.REFERENCIA_PROVEEDOR := AArticulos.REFERENCIA_PROVEEDOR;
|
|
ADetalles.Post;
|
|
AArticulos.Next;
|
|
end;
|
|
finally
|
|
ADetallesController.EndUpdate(ADetalles);
|
|
ADetallesController := NIL;
|
|
end;
|
|
end;
|
|
|
|
procedure Inicializar;
|
|
begin
|
|
dmGenerarContratosCli := TdmGenerarContratosCli.Create(nil);
|
|
APresupuestosClienteController := TPresupuestosClienteController.Create;
|
|
AContratosClienteController := TContratosClienteController.Create;
|
|
AClientesController := TClientesController.Create;
|
|
ADireccionesController := TDireccionesContactoController.Create;
|
|
end;
|
|
|
|
procedure Finalizar;
|
|
begin
|
|
FreeAndNIL(dmGenerarContratosCli);
|
|
APresupuestosClienteController := nil;
|
|
AContratosClienteController := nil;
|
|
AClientesController := nil;
|
|
ADireccionesController := nil;
|
|
end;
|
|
|
|
|
|
function GenerarContratoCli(const IDPresupuesto : Integer; const APreguntaMostrarContrato : Boolean = True) : Boolean; overload;
|
|
var
|
|
APresupuesto : IBizPresupuestoCliente;
|
|
AContrato : IBizContratoCliente;
|
|
begin
|
|
Result := False;
|
|
|
|
try
|
|
if not Assigned(APresupuestosClienteController) then
|
|
Inicializar;
|
|
|
|
APresupuesto := APresupuestosClienteController.Buscar(IDPresupuesto);
|
|
if Assigned(APresupuesto) then
|
|
Result := GenerarContratoCli(APresupuesto, AContrato);
|
|
finally
|
|
if Assigned(APresupuestosClienteController) then
|
|
Finalizar;
|
|
end;
|
|
end;
|
|
|
|
function GenerarContratoCli(APresupuesto : IBizPresupuestoCliente; var AContrato: IBizContratoCliente; const APreguntaMostrarContrato : Boolean = True) : Boolean; overload;
|
|
begin
|
|
AContrato := NIL;
|
|
|
|
if not Assigned(APresupuesto) then
|
|
raise Exception.Create('Presupuesto de cliente no asignado (GenerarContratoCli)');
|
|
|
|
if not APresupuesto.DataTable.Active then
|
|
APresupuesto.DataTable.Active := True;
|
|
|
|
if not Assigned(APresupuestosClienteController) then
|
|
Inicializar;
|
|
|
|
try
|
|
AContrato := AContratosClienteController.Nuevo;
|
|
AContrato.ID_EMPRESA := AppFactuGES.EmpresaActiva.ID;
|
|
AContrato.ID_TIENDA := AppFactuGES.TiendaActiva.ID;
|
|
AContrato.TIENDA := AppFactuGES.TiendaActiva.NOMBRE;
|
|
|
|
CopiarPresupuestoAContrato(APresupuesto, AContrato);
|
|
CopiarDetallesAContrato(APresupuesto, AContrato, APresupuesto.Detalles);
|
|
|
|
//Sustituir por if de guardar
|
|
if AContratosClienteController.Guardar(AContrato) then
|
|
begin
|
|
// Asocio el contrato al presupuesto
|
|
APresupuesto.Edit;
|
|
APresupuesto.ID_CONTRATO := AContrato.ID;
|
|
APresupuesto.Post;
|
|
APresupuestosClienteController.Guardar(APresupuesto);
|
|
|
|
if APreguntaMostrarContrato then
|
|
PreguntarMostrarContrato(AContrato);
|
|
|
|
end;
|
|
|
|
Result := True;
|
|
finally
|
|
if Assigned(APresupuestosClienteController) then
|
|
Finalizar;
|
|
end;
|
|
end;
|
|
{
|
|
function ElegirPedidoYGenerarAlbaranCli(var IDAlbaran: Integer) : Boolean; overload;
|
|
var
|
|
APedido : IBizPedidoCliente;
|
|
AAlbaran : IBizAlbaranCliente;
|
|
begin
|
|
Result := False;
|
|
IDAlbaran := -1;
|
|
|
|
AAlbaran := NIL;
|
|
try
|
|
if not Assigned(APedidosClienteController) then
|
|
Inicializar;
|
|
|
|
APedido := APedidosClienteController.ElegirPedidos(APedidosClienteController.BuscarPendientes,
|
|
'Elija el pedido de cliente que desea utilizar para dar de alta el albarán de cliente.'
|
|
, False);
|
|
|
|
if Assigned(APedido) then
|
|
begin
|
|
Result := GenerarAlbaranCli(APedido, AAlbaran);
|
|
if Result then
|
|
IDAlbaran := AAlbaran.ID;
|
|
end;
|
|
finally
|
|
if Assigned(APedidosClienteController) then
|
|
Finalizar;
|
|
end;
|
|
end;
|
|
}
|
|
|
|
function GenerarContratosCli : Boolean; overload;
|
|
// Generara tantos contratos como clientes distintos tenga en la lista de presupuestos seleccionada
|
|
var
|
|
APresupuestos : IBizPresupuestoCliente;
|
|
begin
|
|
Result := False;
|
|
try
|
|
if not Assigned(APresupuestosClienteController) then
|
|
Inicializar;
|
|
|
|
APresupuestos := APresupuestosClienteController.ElegirPresupuestos(APresupuestosClienteController.BuscarSinContrato,
|
|
'Elija el presupuesto/s de cliente aceptado que desea utilizar para dar de alta el/los contrato/s correspondiente.'
|
|
, True);
|
|
|
|
if Assigned(APresupuestos) then
|
|
Result := true; // GenerarContratosCli(APresupuestos);
|
|
|
|
finally
|
|
if Assigned(APresupuestosClienteController) then
|
|
Finalizar;
|
|
end;
|
|
end;
|
|
|
|
end.
|