2011-11-14 17:40:41 +00:00
unit uContratosClienteController;
interface
uses
Classes, uROTypes, SysUtils, uDADataTable, uEditorDBItem,
uControllerBase, uIDataModuleContratosCliente, uClientesController,
uDetallesContratoClienteController, uGestorDocumentosController,
uBizContratosCliente, uBizDireccionesContacto, uBizDetallesContratoCliente,
2021-02-26 08:52:27 +00:00
uIntegerListUtils, uBizPresupuestosCliente;
2011-11-14 17:40:41 +00:00
type
2021-02-26 08:52:27 +00:00
TEnumTiposContrato = ( teVacio, teCocina, teArmario, teBano, teElectrodomestico, teVarios) ;
2011-11-14 17:40:41 +00:00
IContratosClienteController = interface( IControllerBase)
[ '{D6544299-A233-4FF0-BDA4-328DA06DCFD8}' ]
function GetClienteController: IClientesController;
procedure SetClienteController( const Value: IClientesController) ;
property ClienteController: IClientesController read GetClienteController write SetClienteController;
function GetDetallesController: IDetallesContratoClienteController;
procedure SetDetallesController( const Value: IDetallesContratoClienteController) ;
property DetallesController: IDetallesContratoClienteController read GetDetallesController write SetDetallesController;
//GESTION_DOCUMENTOS
function GetGestorDocumentosController: IGestorDocumentosController;
procedure SetGestorDocumentosController( const Value: IGestorDocumentosController) ;
property GestorDocumentosController: IGestorDocumentosController read GetGestorDocumentosController write SetGestorDocumentosController;
procedure RecuperarCliente( AContrato : IBizContratoCliente) ;
2013-09-25 17:13:02 +00:00
procedure ActualizarFormaDePago( AContrato : IBizContratoCliente; ID_FORMA_PAGO: Integer ) ;
2011-11-14 17:40:41 +00:00
function Buscar( const ID: Integer ) : IBizContratoCliente; overload ;
function Buscar( const ListaID: TIntegerList) : IBizContratoCliente; overload ;
function BuscarTodos: IBizContratoCliente; overload ;
function BuscarTodos( const ID_Cliente: Integer ) : IBizContratoCliente; overload ;
procedure Ver( AContrato : IBizContratoCliente) ;
procedure VerTodos( AContratos: IBizContratoCliente;
const AVerModal : Boolean = False ; const AWindowCaption: String = '' ;
const AHeaderText: String = '' ) ;
2021-02-26 08:52:27 +00:00
function Nuevo ( WithInsert: Boolean = True ) : IBizContratoCliente;
function Anadir( AContrato : IBizContratoCliente; const ATipo: TEnumTiposContrato = teVarios) : Boolean ; overload ;
function Anadir( AContratos : IBizContratoCliente; AListaPresupuestos : IBizPresupuestoCliente) : Boolean ; overload ;
2011-11-14 17:40:41 +00:00
function Eliminar( const ID : Integer ) : Boolean ; overload ;
function Eliminar( AContrato : IBizContratoCliente; AllItems: Boolean = false ) : Boolean ; overload ;
function Guardar( AContrato : IBizContratoCliente) : Boolean ;
procedure DescartarCambios( AContrato : IBizContratoCliente) ;
function Existe( const ID: Integer ) : Boolean ;
function Duplicar( AContrato: IBizContratoCliente) : IBizContratoCliente;
function Localizar( AContratos: IBizContratoCliente; const ID : Integer ) : Boolean ;
function ExtraerSeleccionados( AContrato: IBizContratoCliente) : IBizContratoCliente;
function ElegirContratos( AContrato: IBizContratoCliente; AMensaje: String ; AMultiSelect: Boolean ) : IBizContratoCliente;
procedure RecalcularImportes( AContrato : IBizContratoCliente) ;
function EsModificable( AContrato : IBizContratoCliente) : Boolean ;
function EsEliminable( AContrato : IBizContratoCliente) : Boolean ;
2013-06-19 09:44:10 +00:00
procedure Preview( AContrato : IBizContratoCliente; AllItems: Boolean = false ; VerLogotipo: Boolean = true ;
const VerImprimirPrecios: Boolean = False ; const VerImprimirTotales: Boolean = False ; const VerImprimirRefProveedor: Boolean = False ;
const VerImprimirObservaciones: Boolean = False ; const VerImprimirIncidencias: Boolean = False ) ;
procedure Print( AContrato : IBizContratoCliente; AllItems: Boolean = false ; VerLogotipo: Boolean = true ;
const VerImprimirPrecios: Boolean = False ; const VerImprimirTotales: Boolean = False ; const VerImprimirRefProveedor: Boolean = False ;
const VerImprimirObservaciones: Boolean = False ; const VerImprimirIncidencias: Boolean = False ) ;
2011-11-14 17:40:41 +00:00
procedure EnviarContratoPorEMail( AContrato : IBizContratoCliente) ;
function CambiarSituacion( AContrato : IBizContratoCliente; Situacion: String ; FechaDecision: TDateTime; AllItems: Boolean = false ) : Boolean ;
function DarListaAnosContratos: TStringList;
procedure FiltrarAno( AContrato: IBizContratoCliente; ADynWhereDataTable: WideString ; const Ano: String ) ;
procedure VerListadoBeneficios;
2020-12-14 11:14:43 +00:00
procedure VerDireccionEntrega( AContrato : IBizContratoCliente) ;
2011-11-14 17:40:41 +00:00
end ;
TContratosClienteController = class( TControllerBase, IContratosClienteController)
protected
FDataModule : IDataModuleContratosCliente;
FClienteController : IClientesController;
FDetallesController : IDetallesContratoClienteController;
FGestorDocumentosController : IGestorDocumentosController;
function GetClienteController: IClientesController;
procedure SetClienteController( const Value: IClientesController) ;
function GetDetallesController: IDetallesContratoClienteController;
procedure SetDetallesController( const Value: IDetallesContratoClienteController) ;
//GESTION_DOCUMENTOS
function GetGestorDocumentosController: IGestorDocumentosController;
procedure SetGestorDocumentosController( const Value: IGestorDocumentosController) ;
//Estos son los tres m<> todos a sobre escribir si se desea heredar toda la logica de
//este controller
procedure AsignarDataModule; virtual ;
procedure RecuperarObjetos( AContrato: IBizContratoCliente) ; virtual ;
procedure RecibirAviso( ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable) ; override ;
function CreateEditor( const AName : String ; const IID: TGUID; out Intf) : Boolean ;
procedure FiltrarEmpresa( AContrato: IBizContratoCliente) ;
function _Vacio : IBizContratoCliente;
function ValidarContrato( AContrato: IBizContratoCliente) : Boolean ;
procedure RellenarValoresDefecto( AContrato: IBizContratoCliente; ATipo: TEnumTiposContrato) ;
public
property ClienteController: IClientesController read GetClienteController write SetClienteController;
property DetallesController: IDetallesContratoClienteController read GetDetallesController write SetDetallesController;
property GestorDocumentosController: IGestorDocumentosController read GetGestorDocumentosController write SetGestorDocumentosController;
constructor Create; override ;
destructor Destroy; override ;
function Localizar( AContratos: IBizContratoCliente; const ID : Integer ) : Boolean ;
procedure RecuperarCliente( AContrato : IBizContratoCliente) ;
2013-09-25 17:13:02 +00:00
procedure ActualizarFormaDePago( AContrato : IBizContratoCliente; ID_FORMA_PAGO: Integer ) ;
2011-11-14 17:40:41 +00:00
function Eliminar( const ID : Integer ) : Boolean ; overload ;
function Eliminar( AContrato : IBizContratoCliente; AllItems: Boolean = false ) : Boolean ; overload ;
function Guardar( AContrato : IBizContratoCliente) : Boolean ;
procedure DescartarCambios( AContrato : IBizContratoCliente) ; virtual ;
function Existe( const ID: Integer ) : Boolean ; virtual ;
2021-02-26 08:52:27 +00:00
function Anadir( AContrato : IBizContratoCliente; const ATipo: TEnumTiposContrato = teVarios) : Boolean ; overload ;
function Anadir( AContratos : IBizContratoCliente; AListaPresupuestos : IBizPresupuestoCliente) : Boolean ; overload ;
2011-11-14 17:40:41 +00:00
function Buscar( const ListaID: TIntegerList) : IBizContratoCliente; overload ;
function Buscar( const ID: Integer ) : IBizContratoCliente; overload ;
function BuscarTodos: IBizContratoCliente; overload ;
function BuscarTodos( const ID_Cliente: Integer ) : IBizContratoCliente; overload ;
2021-02-26 08:52:27 +00:00
function Nuevo ( WithInsert: Boolean = True ) : IBizContratoCliente;
2011-11-14 17:40:41 +00:00
procedure Ver( AContrato : IBizContratoCliente) ;
procedure VerTodos( AContratos: IBizContratoCliente;
const AVerModal : Boolean = False ; const AWindowCaption: String = '' ;
const AHeaderText: String = '' ) ;
function Duplicar( AContrato: IBizContratoCliente) : IBizContratoCliente;
function ExtraerSeleccionados( AContrato: IBizContratoCliente) : IBizContratoCliente;
function ElegirContratos( AContrato: IBizContratoCliente; AMensaje: String ; AMultiSelect: Boolean ) : IBizContratoCliente;
procedure RecalcularImportes( AContrato : IBizContratoCliente) ;
function EsModificable( AContrato : IBizContratoCliente) : Boolean ;
function EsEliminable( AContrato : IBizContratoCliente) : Boolean ;
2013-06-19 09:44:10 +00:00
procedure Preview( AContrato : IBizContratoCliente; AllItems: Boolean = false ; VerLogotipo: Boolean = true ;
const VerImprimirPrecios: Boolean = False ; const VerImprimirTotales: Boolean = False ; const VerImprimirRefProveedor: Boolean = False ;
const VerImprimirObservaciones: Boolean = False ; const VerImprimirIncidencias: Boolean = False ) ;
procedure Print( AContrato : IBizContratoCliente; AllItems: Boolean = false ; VerLogotipo: Boolean = true ;
const VerImprimirPrecios: Boolean = False ; const VerImprimirTotales: Boolean = False ; const VerImprimirRefProveedor: Boolean = False ;
const VerImprimirObservaciones: Boolean = False ; const VerImprimirIncidencias: Boolean = False ) ;
2011-11-14 17:40:41 +00:00
procedure EnviarContratoPorEMail( AContrato : IBizContratoCliente) ;
function CambiarSituacion( AContrato : IBizContratoCliente; Situacion: String ; FechaDecision: TDateTime; AllItems: Boolean = false ) : Boolean ;
function DarListaAnosContratos: TStringList;
procedure FiltrarAno( AContrato: IBizContratoCliente; ADynWhereDataTable: WideString ; const Ano: String ) ;
procedure VerListadoBeneficios;
2020-12-14 11:14:43 +00:00
procedure VerDireccionEntrega( AContrato : IBizContratoCliente) ;
2011-11-14 17:40:41 +00:00
end ;
implementation
uses
2021-02-26 08:52:27 +00:00
Forms, Controls, cxControls, DB, uEditorRegistryUtils, uEditorPreview, DateUtils,
2011-11-14 17:40:41 +00:00
uIEditorContratosCliente, uDataModuleContratosCliente, Variants,
uBizContactos, uDataTableUtils, uDataModuleUsuarios, uFactuGES_App,
schContratosClienteClient_Intf, uDAInterfaces, uDateUtils, uIEditorContratoCliente,
uIEditorElegirContratosCliente, uIEditorDireccionEntregaContratoCliente,
2015-12-04 12:18:02 +00:00
schContactosClient_Intf, uContratosClienteReportController,
uFormasPagoController, uBizFormasPago, uTiposIVAController, uBizTiposIVA,
2011-11-14 17:40:41 +00:00
uSistemaFunc, uEMailUtils, uDialogElegirEMail, Dialogs, uStringsUtils,
uIEditorContratosClienteBeneficios, uPresupuestosClienteController,
2021-02-26 08:52:27 +00:00
uConfiguracionController, uBizDetallesPresupuestoCliente, schPresupuestosClienteClient_Intf,
uControllerDetallesBase;
2011-11-14 17:40:41 +00:00
{ TContratosClienteController }
2021-02-26 08:52:27 +00:00
procedure CopiarArticulosPresupuesto( AOrigen: IBizDetallesPresupuestoCliente; ADestino: IBizDetallesContratoCliente) ;
var
i : integer ;
ADetallesController : IDetallesContratoClienteController;
begin
if not Assigned( AOrigen) then
raise Exception. Create ( 'Origen no asignado (CopiarArticulosAlbaran)' ) ;
if not Assigned( ADestino) then
raise Exception. Create ( 'Destino no asignado (CopiarArticulosAlbaran)' ) ;
if not AOrigen. DataTable. Active then
AOrigen. DataTable. Active : = True ;
if not ADestino. DataTable. Active then
ADestino. DataTable. Active : = True ;
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( ADestino) ;
AOrigen. DataTable. First;
for i : = 0 to AOrigen. DataTable. RecordCount - 1 do
begin
ADetallesController. Add( ADestino, AOrigen. TIPO_DETALLE) ;
ADestino. Edit;
ADestino. ID_ARTICULO : = AOrigen. ID_ARTICULO;
ADestino. TIPO_ARTICULO : = AOrigen. TIPO_ARTICULO;
ADestino. PROPIEDAD : = AOrigen. PROPIEDAD;
ADestino. CONCEPTO : = AOrigen. CONCEPTO;
ADestino. CANTIDAD : = AOrigen. CANTIDAD;
ADestino. IMPORTE_UNIDAD : = AOrigen. IMPORTE_UNIDAD;
ADestino. IMPORTE_TOTAL : = AOrigen. IMPORTE_TOTAL;
ADestino. DESCUENTO : = AOrigen. DESCUENTO;
ADestino. IMPORTE_PORTE : = AOrigen. IMPORTE_PORTE;
ADestino. VISIBLE : = AOrigen. VISIBLE;
ADestino. VALORADO : = AOrigen. VALORADO;
ADestino. Post;
AOrigen. Next;
end ;
finally
ADetallesController. EndUpdate( ADestino) ;
ADestino. DataTable. Last;
ADetallesController : = NIL ;
end ;
end ;
2013-09-25 17:13:02 +00:00
procedure TContratosClienteController. ActualizarFormaDePago(
AContrato: IBizContratoCliente; ID_FORMA_PAGO: Integer ) ;
var
AFormasPago : IBizFormaPago;
AFormasPagoController : IFormasPagoController;
2015-12-04 12:18:02 +00:00
ATiposIVA : IBizTipoIVA;
ATiposIVAController : ITiposIVAController;
2013-09-25 17:13:02 +00:00
bEnEdicion : Boolean ;
begin
AFormasPagoController : = TFormasPagoController. Create;
AFormasPago : = AFormasPagoController. Buscar( ID_FORMA_PAGO) ;
AFormasPago. Open;
2015-12-04 12:18:02 +00:00
//Se cambia tambien el tipo de IVA por el de la ficha a peticion de Angelica
ATiposIVAController : = TTiposIVAController. Create;
ATiposIVA : = ATiposIVAController. Buscar( AContrato. Cliente. ID_TIPO_IVA) ;
ATiposIVA. Open;
2013-09-25 17:13:02 +00:00
bEnEdicion : = ( AContrato. DataTable. State in dsEditModes) ;
if not bEnEdicion then
AContrato. Edit;
AContrato. ID_FORMA_PAGO : = AFormasPago. ID;
AContrato. DataTable. FieldByName( fld_ContratosClienteFORMA_PAGO) . AsString : = AFormasPago. DESCRIPCION;
2015-12-04 12:18:02 +00:00
AContrato. ID_TIPO_IVA : = ATiposIva. ID;
2013-09-25 17:13:02 +00:00
if not bEnEdicion then
AContrato. Post;
AFormasPago : = NIL ;
AFormasPagoController : = NIL ;
2015-12-04 12:18:02 +00:00
ATiposIVA : = NIL ;
ATiposIVAController : = NIL ;
2013-09-25 17:13:02 +00:00
end ;
2011-11-14 17:40:41 +00:00
function TContratosClienteController. Anadir( AContrato : IBizContratoCliente;
const ATipo: TEnumTiposContrato = teVarios) : Boolean ;
begin
if not Assigned( AContrato) then
raise Exception. Create ( 'Contrato no asignado (Anadir)' ) ;
AContrato. Insert;
2021-02-26 08:52:27 +00:00
if not ( ATipo = teVacio) then
RellenarValoresDefecto( AContrato, ATipo) ;
2011-11-14 17:40:41 +00:00
Result : = True ;
end ;
{
procedure TContratosClienteController. SincronizarDocumentos( const ID: Integer ; FListaDocumentos: TStringList; Directorio: String ) ;
var
ListaDocumentosServidor: TStringList;
ANombreFichero: String ;
AFichero: Binary;
i, j: Integer ;
begin
//Eliminamos todos los documentos del servidor que ya no existan en el cliente.
ListaDocumentosServidor : = DarListaDocumentos( ID) ;
for i: = 0 to ListaDocumentosServidor. Count - 1 do
if not FListaDocumentos. Find( ListaDocumentosServidor. Strings[ i] , j) then
if not FDataModule. EliminarFichero( ID, ListaDocumentosServidor. Strings[ i] ) then
showmessage( 'Error al borrar fichero' + ListaDocumentosServidor. Strings[ i] ) ;
//Subimos todos los ficheros que halla al servidor (de momento no se miran fechas)
for i : = 0 to FListaDocumentos. Count - 1 do
begin
ANombreFichero : = Directorio + FListaDocumentos. Strings[ i] ;
if FileExists( ANombreFichero) then
begin
AFichero : = Binary. Create;
AFichero. LoadFromFile( ANombreFichero) ;
SubirFichero( ID, ExtractFileName( ANombreFichero) , AFichero) ;
end ;
end ;
end ;
}
2021-02-26 08:52:27 +00:00
function TContratosClienteController. Anadir( AContratos: IBizContratoCliente; AListaPresupuestos: IBizPresupuestoCliente) : Boolean ;
var
AContratoActual : IBizContratoCliente;
APresupuestosController : IPresupuestosClienteController;
ACadena: String ;
I, x: Integer ;
bEnEdicion : Boolean ;
begin
Result : = False ;
// ATENCI<43> N!!! AContratos tiene que estar vacio para no pisar contratos
// ya generados.
if not Assigned( AContratos) then
raise Exception. Create ( 'Contrato no asignado (Anadir)' ) ;
if not Assigned( AListaPresupuestos) then
raise Exception. Create ( 'Presupeustos no asignados (Anadir)' ) ;
if not AContratos. DataTable. Active then
AContratos. DataTable. Active : = True ;
if not AListaPresupuestos. DataTable. Active then
AListaPresupuestos. DataTable. Active : = True ;
ShowHourglassCursor;
Application. ProcessMessages;
APresupuestosController : = TPresupuestosClienteController. Create;
try
// Ordenar por fecha de presupuesto
AListaPresupuestos. DataTable. Sort( [ fld_PresupuestosClienteFECHA_DECISION] , [ uDADataTable. sdAscending] ) ;
AListaPresupuestos. First;
for I : = 0 to AListaPresupuestos. DataTable. RecordCount - 1 do
begin
AListaPresupuestos. _Cliente : = NIL ;
AContratoActual : = NIL ;
// Busco si hay algun contrato ya hecho de ese Cliente
AContratos. DataTable. First;
if AContratos. DataTable. Locate( fld_PresupuestosClienteID_CLIENTE, AListaPresupuestos. ID_Cliente, [ ] ) then
begin
AContratoActual : = AContratos;
RecuperarCliente( AContratoActual) ;
AContratoActual. Cliente. DataTable. Active : = True ;
end
else begin
// No hay contrato de ese cliente. Creo uno nuevo
Anadir( AContratos, teVacio) ;
APresupuestosController. RecuperarCliente( AListaPresupuestos) ;
AListaPresupuestos. Cliente. DataTable. Active : = True ;
AContratos. Cliente : = AListaPresupuestos. Cliente;
//Establecemos la forma de pago establecido en la ficha del cliente
if AContratos. Cliente. ID_FORMA_PAGO > 0 then
begin
bEnEdicion : = ( AContratos. DataTable. State in dsEditModes) ;
if not bEnEdicion then
AContratos. Edit;
AContratos. ID_FORMA_PAGO : = AContratos. Cliente. ID_FORMA_PAGO;
// if AFacturas.Cliente.ID_TIPO_IVA > 0 then
// AFacturas.ID_TIPO_IVA := AFacturas.Cliente.ID_TIPO_IVA;
AContratos. Post;
if bEnEdicion then
AContratos. Edit;
end ;
//En este caso no queremos el descuento general del cliente asociado a su ficha, ya que partimos del valor que tengan los presupuestos
bEnEdicion : = ( AContratos. DataTable. State in dsEditModes) ;
if not bEnEdicion then
AContratos. Edit;
AContratos. DESCUENTOIsNull : = True ;
AContratos. Post;
if bEnEdicion then
AContratos. Edit;
AContratoActual : = AContratos;
end ;
// Ya tengo el contrato. Le a<> ado los conceptos del presupuesto
AContratoActual. Detalles. DataTable. Sort( [ fld_PresupuestosCliente_DetallesPOSICION] , [ uDADataTable. sdAscending] ) ;
AContratoActual. Detalles. DataTable. Last;
//Es de tipo TITULO para que salga en el informe ya que se agrupa por capitulos
Self. DetallesController. Add( AContratoActual. Detalles, TIPO_DETALLE_TITULO) ;
with AContratoActual. Detalles do
begin
ACadena : = '' ;
ACadena : = 'Presupuesto ' + AListaPresupuestos. REFERENCIA + ' con fecha ' + DateToStr( AListaPresupuestos. FECHA_PRESUPUESTO) + ' aceptado el ' + DateToStr( AListaPresupuestos. FECHA_DECISION) ;
ACadena : = ACadena + #13 + ' referencia: ' + AListaPresupuestos. REFERENCIA_CLIENTE;
Edit;
CONCEPTO : = ACadena;
Post;
end ;
// A<> ado el contenido del presupuesto
CopiarArticulosPresupuesto( AListaPresupuestos. Detalles, AContratoActual. Detalles) ;
//MUCHO CUIDADO NOS TENEMOS QUE ASEGURAR DE A<> ADIR AL FINAL DEL TODO, podr<64> a calcular mal los descuentos de capitulo del presupuesto si los hubiera
AContratoActual. Detalles. DataTable. Sort( [ fld_PresupuestosCliente_DetallesPOSICION] , [ uDADataTable. sdAscending] ) ;
AContratoActual. Detalles. DataTable. Last;
//Sacamos el descuento total del presupuesto en el caso de tener
if ( AListaPresupuestos. IMPORTE_DESCUENTO > 0 ) then
begin
Self. DetallesController. Add( AContratoActual. Detalles, TIPO_DETALLE_TITULO) ;
with AContratoActual. Detalles do
begin
ACadena : = '' ;
ACadena : = 'Descuento presupuesto ' + AListaPresupuestos. REFERENCIA + ' con fecha ' + DateToStr( AListaPresupuestos. FECHA_PRESUPUESTO) ;
Edit;
CONCEPTO : = ACadena;
Post;
end ;
Self. DetallesController. Add( AContratoActual. Detalles, TIPO_DETALLE_CONCEPTO) ;
with AContratoActual. Detalles do
begin
Edit;
CONCEPTO : = 'Descuento del presupuesto ' + AListaPresupuestos. REFERENCIA + ' - ' + AListaPresupuestos. DataTable. FieldByName( fld_PresupuestosClienteDESCUENTO) . AsString + '%' ;
CANTIDAD : = - 1 ;
IMPORTE_UNIDAD : = AListaPresupuestos. IMPORTE_DESCUENTO;
Post;
end ;
Self. DetallesController. Add( AContratoActual. Detalles, TIPO_DETALLE_SUBTOTAL) ;
with AContratoActual. Detalles do
begin
ACadena : = '' ;
ACadena : = 'Total Descuento presupuesto ' + AListaPresupuestos. REFERENCIA + ' con fecha ' + DateToStr( AListaPresupuestos. FECHA_PRESUPUESTO) ;
Edit;
CONCEPTO : = ACadena;
Post;
end ;
end ;
// A<> ado el resumen
{ Self. DetallesController. Add( AContratoActual. Detalles, TIPO_DETALLE_SUBTOTAL) ;
with AContratoActual. Detalles do
begin
Edit;
CONCEPTO : = 'Total del presupuesto ' + AListapresupuestos. REFERENCIA;
Post;
end ;
}
// A<> ado una l<> nea en blanco
Self. DetallesController. Add( AContratoActual. Detalles, TIPO_DETALLE_CONCEPTO) ;
with AContratoActual. Detalles do
begin
Edit;
CONCEPTO : = '' ;
Post;
end ;
// Guardo el conrato que acabo de generar o editar
AContratoActual. CalcularImporteTotal;
Self. Guardar( AContratoActual) ;
// Asocio el contrato con el presupuesto
AListaPresupuestos. Edit;
AListaPresupuestos. ID_CONTRATO : = AContratoActual. ID;
AListaPresupuestos. Post;
APresupuestosController. Guardar( AListaPresupuestos) ;
AListaPresupuestos. Next;
end ;
Result : = True ;
finally
APresupuestosController : = NIL ;
HideHourglassCursor
end ;
end ;
2011-11-14 17:40:41 +00:00
procedure TContratosClienteController. AsignarDataModule;
begin
FDataModule : = TDataModuleContratosCliente. Create( Nil ) ;
end ;
function TContratosClienteController. Buscar( const ID: Integer ) : IBizContratoCliente;
begin
Result : = FDataModule. GetItem( ID) ;
FiltrarEmpresa( Result ) ;
end ;
function TContratosClienteController. BuscarTodos: IBizContratoCliente;
begin
Result : = FDataModule. GetItems;
FiltrarEmpresa( Result ) ;
end ;
function TContratosClienteController. Buscar(
const ListaID: TIntegerList) : IBizContratoCliente;
begin
Result : = FDataModule. GetItems( ListaID) ;
FiltrarEmpresa( Result ) ;
end ;
function TContratosClienteController. BuscarTodos(
const ID_Cliente: Integer ) : IBizContratoCliente;
var
Condicion: TDAWhereExpression;
begin
ShowHourglassCursor;
try
Result : = BuscarTodos;
with Result . DataTable. DynamicWhere do
begin
// ID_CLIENTE
Condicion : = NewBinaryExpression( NewField( '' , fld_ContratosClienteID_CLIENTE) , NewConstant( ID_Cliente, datInteger) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
finally
HideHourglassCursor;
end ;
end ;
function TContratosClienteController. CambiarSituacion( AContrato: IBizContratoCliente;
Situacion: String ; FechaDecision: TDateTime; AllItems: Boolean ) : Boolean ;
// En el caso de cambiar almenos un elemento del conjunto se devuelve true
begin
if not Assigned( AContrato) then
raise Exception. Create ( 'AContrato no asignado' ) ;
ShowHourglassCursor;
try
if not AContrato. DataTable. Active then
AContrato. DataTable. Active : = True ;
if ( AContrato. State in dsEditModes) then
AContrato. Cancel;
//Siempre cambiaremos de situacion el seleccionado
if AContrato. SITUACION < > Situacion then
begin
AContrato. DataTable. Edit;
AContrato. SITUACION : = Situacion;
AContrato. DataTable. Post;
end ;
//En el caso de querer eliminar todos los items del objeto AContrato
if AllItems then
begin
with AContrato. DataTable do
begin
First;
while not EOF do
begin
if AContrato. SITUACION < > Situacion then
begin
AContrato. DataTable. Edit;
AContrato. SITUACION : = Situacion;
AContrato. DataTable. Post;
end ;
Next;
end ;
end ;
end ;
AContrato. DataTable. ApplyUpdates;
Result : = True ;
finally
HideHourglassCursor;
end ;
end ;
constructor TContratosClienteController. Create;
begin
inherited ;
AsignarDataModule;
FClienteController : = TClientesController. Create;
FDetallesController : = TDetallesContratoClienteController. Create;
//GESTION_DOCUMENTOS
FGestorDocumentosController : = TGestorDocumentosController. Create;
FDetallesController. addObservador( Self) ;
end ;
function TContratosClienteController. CreateEditor( const AName: String ;
const IID: TGUID; out Intf) : Boolean ;
begin
Result : = Supports( EditorRegistry. CreateEditor( AName) , IID, Intf) ;
end ;
{
function TContratosClienteController. DarListaDocumentos( const ID: Integer ) : TStringList;
begin
Result : = FDataModule. DarListaDocumentos( ID) ;
end ;
function TContratosClienteController. DescargarFichero( const ID: Integer ; const NombreFichero: String ; const DestinoFichero: String ) : Boolean ;
begin
Result : = FDataModule. DescargarFichero( ID, NombreFichero, DestinoFichero) ;
end ;
}
function TContratosClienteController. DarListaAnosContratos: TStringList;
begin
Result : = FDataModule. GetAnosItems;
end ;
procedure TContratosClienteController. DescartarCambios( AContrato: IBizContratoCliente) ;
begin
if not Assigned( AContrato) then
raise Exception. Create ( 'Contrato no asignada' ) ;
ShowHourglassCursor;
try
if ( AContrato. State in dsEditModes) then
AContrato. Cancel;
AContrato. DataTable. CancelUpdates;
finally
HideHourglassCursor;
end ;
end ;
destructor TContratosClienteController. Destroy;
begin
FDataModule : = Nil ;
FClienteController : = Nil ;
FDetallesController : = Nil ;
//GESTION_DOCUMENTOS
FGestorDocumentosController : = Nil ;
inherited ;
end ;
function TContratosClienteController. Duplicar(
AContrato: IBizContratoCliente) : IBizContratoCliente;
begin
Result : = Self. _Vacio;
ShowHourglassCursor;
try
DuplicarRegistros( AContrato. DataTable, Result . DataTable, mdrActual) ;
DuplicarRegistros( AContrato. Detalles. DataTable, Result . Detalles. DataTable, mdrTodos) ;
// Hay que dejar algunos campos como si fuera un contrato nuevo
Result . Edit;
with Result do
begin
ID_EMPRESA : = AppFactuGES. EmpresaActiva. ID;
2012-01-23 17:02:46 +00:00
ID_TIENDA : = AppFactuGES. TiendaActiva. ID;
2011-11-14 17:40:41 +00:00
USUARIO : = AppFactuGES. UsuarioActivo. UserName;
FECHA_CONTRATO : = DateOf( Now) ;
INCIDENCIAS_ACTIVAS : = 0 ;
INCIDENCIASIsNull : = True ;
// ID_FACTURAIsNull := True;
REFERENCIA : = '' ;
SITUACION : = SITUACION_CONTRATO_PENDIENTE;
2018-04-03 15:53:26 +00:00
// PRECIO_PUNTO := AppFactuGES.EmpresaActiva.PRECIO_PUNTO;
2011-11-14 17:40:41 +00:00
end ;
Result . Post;
finally
HideHourglassCursor;
end ;
end ;
function TContratosClienteController. ValidarContrato(
AContrato: IBizContratoCliente) : Boolean ;
begin
if not Assigned( AContrato) then
raise Exception. Create ( 'Contrato no asignado' ) ;
if ( AContrato. DataTable. State in dsEditModes) then
AContrato. DataTable. Post;
//Tambien hacemos post de sus tablas hija
if ( AContrato. Detalles. DataTable. State in dsEditModes) then
AContrato. Detalles. DataTable. Post;
// Abrir el cliente para la validaci<63> n
if Assigned( AContrato. Cliente) then
AContrato. Cliente. DataTable. Active : = True ;
if ( AContrato. ID_Cliente < = 0 ) then
// Si hay altas autom<6F> ticas no hay objeto Cliente pero s<> hay ID_CLIENTE
{ ( not Assigned( AContrato. Cliente) ) or
( AContrato. Cliente. IsEmpty) then }
raise Exception. Create( 'Debe indicar el cliente de este contrato' ) ;
if ( EsFechaVacia( AContrato. FECHA_CONTRATO) ) then
raise Exception. Create( 'Debe indicar la fecha de este contrato' ) ;
if ( AContrato. Detalles. DataTable. RecordCount = 0 ) then
raise Exception. Create( 'El contrato debe tener en su contenido al menos un concepto' ) ;
FDetallesController. ValidarDetalles( AContrato. Detalles) ;
{ Asegurarse de valores en campos "autom<6F> ticos" tanto
en MODIFICACI<EFBFBD> N como en INSERCI<EFBFBD> N. }
AContrato. Edit;
try
AContrato. USUARIO : = AppFactuGES. UsuarioActivo. UserName;
if Assigned( AContrato. Cliente)
and ( AContrato. ID_CLIENTE < > AContrato. Cliente. ID) then
AContrato. ID_CLIENTE : = AContrato. Cliente. ID;
Result : = True ;
finally
AContrato. Post;
end ;
end ;
procedure TContratosClienteController. Ver( AContrato: IBizContratoCliente) ;
var
AEditor : IEditorContratoCliente;
begin
AEditor : = NIL ;
RecuperarObjetos( AContrato) ;
CreateEditor( 'EditorContratoCliente' , IEditorContratoCliente, AEditor) ;
if Assigned( AEditor) then
try
AEditor. Controller : = Self; //OJO ORDEN MUY IMPORTANTE
AEditor. Contrato : = AContrato;
//MODO CONSULTAR
if not EsModificable( AContrato) then
begin
SetDataTableReadOnly( AContrato. DataTable, True ) ;
AEditor. ReadOnly : = True ;
end ;
AEditor. ShowModal;
//MODO CONSULTAR (Se deja la tabla como estaba)
if AEditor. ReadOnly then
SetDataTableReadOnly( AContrato. DataTable, False ) ;
finally
AEditor. Release;
AEditor : = NIL ;
end ;
end ;
2020-12-14 11:14:43 +00:00
procedure TContratosClienteController. VerDireccionEntrega( AContrato: IBizContratoCliente) ;
var
AEditor : IEditorDireccionEntregaContratoCliente;
begin
AEditor : = NIL ;
//RecuperarObjetos(AContrato); <- No descomentar. No hace falta
CreateEditor( 'EditorDireccionEntregaContratoCliente' , IEditorDireccionEntregaContratoCliente, AEditor) ;
if Assigned( AEditor) then
try
AEditor. Contrato : = AContrato;
AEditor. ShowModal;
finally
AEditor. Release;
AEditor : = NIL ;
end ;
end ;
2011-11-14 17:40:41 +00:00
procedure TContratosClienteController. VerListadoBeneficios;
var
AContratosClienteBeneficios: IBizContratosClienteBeneficios;
AEditor : IEditorContratosClienteBeneficios;
begin
AEditor : = NIL ;
AContratosClienteBeneficios : = FDataModule. GetContratosClienteBeneficios;
CreateEditor( 'EditorContratosClienteBeneficios' , IEditorContratosClienteBeneficios, AEditor) ;
if Assigned( AEditor) then
try
// AEditor.Controller := Self; //OJO ORDEN MUY IMPORTANTE
AEditor. Contratos : = AContratosClienteBeneficios;
AEditor. ShowModal;
finally
AEditor. Release;
AEditor : = NIL ;
end ;
end ;
procedure TContratosClienteController. VerTodos( AContratos: IBizContratoCliente;
const AVerModal : Boolean = False ; const AWindowCaption: String = '' ;
const AHeaderText: String = '' ) ;
var
AEditor : IEditorContratosCliente;
begin
AEditor : = NIL ;
CreateEditor( 'EditorContratosCliente' , IEditorContratosCliente, AEditor) ;
if Assigned( AEditor) then
try
// if not EsCadenaVacia(AWindowCaption) then
// AEditor.WindowCaption := AWindowCaption;
// if not EsCadenaVacia(AHeaderText) then
// AEditor.HeaderText := AHeaderText;
AEditor. Controller : = Self; //OJO ORDEN MUY IMPORTANTE
AEditor. Contratos : = AContratos;
AEditor. MultiSelect : = True ;
if AVerModal then
AEditor. ShowModal
else
AEditor. ShowEmbedded;
finally
if AVerModal then
AEditor. Release;
AEditor : = NIL ;
end ;
end ;
function TContratosClienteController. _Vacio: IBizContratoCliente;
begin
Result : = Buscar( ID_NULO) ;
end ;
function TContratosClienteController. Eliminar( const ID: Integer ) : Boolean ;
var
AContrato : IBizContratoCliente;
begin
AContrato : = Buscar( ID) ;
if not Assigned( AContrato) then
raise Exception. Create( Format( 'No se ha encontrado el contrato con ID = %d' , [ ID] ) ) ;
Result : = Eliminar( AContrato) ;
AContrato : = NIL ;
end ;
function TContratosClienteController. ElegirContratos( AContrato: IBizContratoCliente; AMensaje: String ; AMultiSelect: Boolean ) : IBizContratoCliente;
var
AEditor : IEditorElegirContratosCliente;
begin
Result : = NIL ;
CreateEditor( 'EditorElegirContratosCliente' , IEditorElegirContratosCliente, AEditor) ;
if Assigned( AEditor) then
try
AEditor. Controller : = Self;
AEditor. Contratos : = AContrato;
AEditor. MultiSelect : = AMultiSelect;
AEditor. Mensaje : = AMensaje;
if IsPositiveResult( AEditor. ShowModal) then
Result : = AEditor. ContratosClienteSeleccionados;
finally
AEditor. Release;
AEditor : = NIL ;
end ;
end ;
function TContratosClienteController. Eliminar( AContrato: IBizContratoCliente; AllItems: Boolean = false ) : Boolean ;
//En el caso de eliminar almenos un elemento del conjunto se devuelve true
var
bEliminado: Boolean ;
begin
bEliminado : = False ;
if not Assigned( AContrato) then
raise Exception. Create ( 'AContrato no asignado' ) ;
ShowHourglassCursor;
try
if not AContrato. DataTable. Active then
AContrato. DataTable. Active : = True ;
if ( AContrato. State in dsEditModes) then
AContrato. Cancel;
//Siempre eliminaremos el seleccionado
if EsEliminable( AContrato) then
begin
//GESTION_DOCUMENTOS
FGestorDocumentosController. EliminarDirectorio( AContrato. ID) ;
AContrato. Delete;
bEliminado : = True ;
end ;
//En el caso de querer eliminar todos los items del objeto AContrato
if AllItems then
begin
with AContrato. DataTable do
begin
First;
while not EOF do
begin
if EsEliminable( AContrato) then
begin
//GESTION_DOCUMENTOS
FGestorDocumentosController. EliminarDirectorio( AContrato. ID) ;
AContrato. Delete;
bEliminado : = True
end
else Next;
end ;
end ;
end ;
if bEliminado then
begin
AContrato. DataTable. ApplyUpdates;
Result : = True ;
end
else
Result : = False ;
finally
HideHourglassCursor;
end ;
end ;
procedure TContratosClienteController. EnviarContratoPorEMail(
AContrato: IBizContratoCliente) ;
var
AReportController : IContratosClienteReportController;
AFicheroTMP : TFileName;
AEMail : String ;
AListaEmail : TStringList;
begin
if not Assigned( AContrato) then
raise Exception. Create ( 'Contrato no asignado (EnviarContratoPorEMail)' ) ;
if AContrato. DataTable. Active then
AContrato. DataTable. Active : = True ;
AFicheroTMP : = DarFicheroPDFTemporal( EscapeIllegalChars( AContrato. REFERENCIA) ) ;
AListaEmail : = TStringList. Create;
try
RecuperarCliente( AContrato) ;
AContrato. Cliente. DataTable. Active : = True ;
if not AContrato. Cliente. EMAIL_1IsNull then
AListaEmail. Add( AContrato. Cliente. EMAIL_1) ;
if not AContrato. Cliente. EMAIL_2IsNull then
AListaEmail. Add( AContrato. Cliente. EMAIL_2) ;
if not ElegirEMail( AListaEmail, AEMail) then
Exit;
finally
FreeANDNIL( AListaEmail) ;
end ;
ShowHourglassCursor;
AReportController : = TContratosClienteReportController. Create;
try
AReportController. ExportToPDF( AContrato. ID, AFicheroTMP) ;
SendMailMAPI( 'Contrato ' + AContrato. REFERENCIA, '' , AFicheroTMP, '' , '' , AContrato. Cliente. NOMBRE, AEMail) ;
finally
DeleteFile( AFicheroTMP) ;
AReportController : = NIL ;
HideHourglassCursor;
end ;
end ;
function TContratosClienteController. EsEliminable( AContrato: IBizContratoCliente) : Boolean ;
begin
if not Assigned( AContrato) then
raise Exception. Create ( 'Contrato no asignado: EsEliminable' ) ;
Result : = True ;
end ;
function TContratosClienteController. EsModificable( AContrato: IBizContratoCliente) : Boolean ;
begin
if not Assigned( AContrato) then
raise Exception. Create ( 'Contrato no asignado (EsModificable)' ) ;
Result : = True ;
end ;
procedure TContratosClienteController. RecalcularImportes(
AContrato: IBizContratoCliente) ;
var
bEnEdicion : Boolean ;
ADetallePosAct : Integer ;
begin
if not Assigned( AContrato) then
raise Exception. Create ( 'Contrato no asignado (RecalcularImportes)' ) ;
if AContrato. DataTable. Active then
AContrato. DataTable. Active : = True ;
{ Hay que guardar la posici<EFBFBD> n en la que estamos en los detalles por que
la asignaci<EFBFBD> n de valores a los campos IMPORTE_NETO e IMPORTE_PORTE
( ver m<EFBFBD> s adelante) colocan el puntero en la tabla detalle al principio.
No he encontrado la raz<EFBFBD> n por la que mueve el puntero. }
ADetallePosAct : = AContrato. Detalles. POSICION;
bEnEdicion : = ( AContrato. DataTable. State in dsEditModes) ;
if not bEnEdicion then
AContrato. Edit;
ShowHourglassCursor;
try
AContrato. IMPORTE_NETO : = FDetallesController. DarTotalImporteTotal( AContrato. Detalles) ;
AContrato. IMPORTE_PORTE : = FDetallesController. DarTotalPorteTotal( AContrato. Detalles) ;
if not bEnEdicion then
AContrato. Post;
finally
HideHourglassCursor;
// Restaurar la posici<63> n que ten<65> amos en los detalles.
FDetallesController. LocalizarPosicion( AContrato. Detalles, ADetallePosAct) ;
end ;
end ;
procedure TContratosClienteController. RecibirAviso( ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable) ;
var
AContrato : IBizContratoCliente;
ADetalles : IBizDetallesContratoCliente;
begin
inherited ;
if Supports( ADataTable, IBizDetallesContratoCliente, ADetalles) and
Supports( ADetalles. DataTable. MasterSource. DataTable, IBizContratoCliente, AContrato) then
begin
RecalcularImportes( AContrato) ;
end ;
end ;
procedure TContratosClienteController. RecuperarObjetos( AContrato: IBizContratoCliente) ;
begin
RecuperarCliente( AContrato) ;
end ;
2011-11-18 17:12:39 +00:00
procedure TContratosClienteController. RellenarValoresDefecto( AContrato: IBizContratoCliente; ATipo: TEnumTiposContrato) ;
var
AFormasPago : IBizFormaPago;
AFormasPagoController : IFormasPagoController;
2011-11-14 17:40:41 +00:00
begin
2011-11-18 17:12:39 +00:00
AFormasPagoController : = TFormasPagoController. Create;
2011-11-14 17:40:41 +00:00
case ATipo of
teCocina:
begin
AContrato. TIPO_CONTRATO : = CTE_COCINA;
2017-06-07 16:51:11 +00:00
AContrato. ID_FORMA_PAGO : = StrToInt( AppFactuGES. Configuracion. GetSettingAsString( teBD, CTE_FORMA_PAGO_COCINA, AppFactuGES. EmpresaActiva. ID) ) ;
2011-11-18 17:12:39 +00:00
AFormasPago : = AFormasPagoController. Buscar( AContrato. ID_FORMA_PAGO) ;
AFormasPago. Open;
AContrato. FORMA_PAGO. Add( AFormasPago. DESCRIPCION) ;
2017-06-07 16:51:11 +00:00
AContrato. PLAZO_ENTREGA. Add( AppFactuGES. Configuracion. GetSettingAsString( teBD, CTE_PLAZOS_ENTREGA_COCINA, AppFactuGES. EmpresaActiva. ID) ) ;
AContrato. OBSERVACIONES. Add( AppFactuGES. Configuracion. GetSettingAsString( teBD, CTE_OBSERVACIONES_COCINA, AppFactuGES. EmpresaActiva. ID) ) ;
2014-05-08 15:04:53 +00:00
( Self. DetallesController as IDetallesContratoClienteController) . AnadirCapitulo( TIPO_CAPITULO_C, 'MUEBLES DE COCINA ' , True , AContrato. Detalles) ;
2012-07-11 15:39:13 +00:00
( Self. DetallesController as IDetallesContratoClienteController) . AnadirCapitulo( TIPO_CAPITULO_V, 'ENCIMERA ' , True , AContrato. Detalles) ;
( Self. DetallesController as IDetallesContratoClienteController) . AnadirCapitulo( TIPO_CAPITULO_V, 'ELECTRODOM<4F> STICOS ' , True , AContrato. Detalles) ;
( Self. DetallesController as IDetallesContratoClienteController) . AnadirCapitulo( TIPO_CAPITULO_V, 'COMPLEMENTOS ' , True , AContrato. Detalles) ;
2011-11-14 17:40:41 +00:00
( Self. DetallesController as IDetallesContratoClienteController) . AnadirCapitulo( TIPO_CAPITULO_V, 'IMPORTES ' , True , AContrato. Detalles) ;
( Self. DetallesController as IDetallesContratoClienteController) . AnadirCapitulo( TIPO_CAPITULO_V, 'AUMENTO POR ' , False , AContrato. Detalles) ;
end ;
teArmario:
begin
AContrato. TIPO_CONTRATO : = CTE_ARMARIO;
2017-06-07 16:51:11 +00:00
AContrato. ID_FORMA_PAGO : = StrToInt( AppFactuGES. Configuracion. GetSettingAsString( teBD, CTE_FORMA_PAGO_ARMARIO, AppFactuGES. EmpresaActiva. ID) ) ;
2011-11-18 17:12:39 +00:00
AFormasPago : = AFormasPagoController. Buscar( AContrato. ID_FORMA_PAGO) ;
AFormasPago. Open;
AContrato. FORMA_PAGO. Add( AFormasPago. DESCRIPCION) ;
2017-06-07 16:51:11 +00:00
AContrato. PLAZO_ENTREGA. Add( AppFactuGES. Configuracion. GetSettingAsString( teBD, CTE_PLAZOS_ENTREGA_ARMARIO, AppFactuGES. EmpresaActiva. ID) ) ;
AContrato. OBSERVACIONES. Add( AppFactuGES. Configuracion. GetSettingAsString( teBD, CTE_OBSERVACIONES_ARMARIO, AppFactuGES. EmpresaActiva. ID) ) ;
2014-05-08 15:04:53 +00:00
( Self. DetallesController as IDetallesContratoClienteController) . AnadirCapitulo( TIPO_CAPITULO_AF, 'FRENTE DE ARMARIO N<> ' , True , AContrato. Detalles) ;
( Self. DetallesController as IDetallesContratoClienteController) . AnadirCapitulo( TIPO_CAPITULO_AI, 'INTERIOR DE ARMARIO N<> ' , True , AContrato. Detalles) ;
2011-11-14 17:40:41 +00:00
end ;
teBano:
begin
AContrato. TIPO_CONTRATO : = CTE_BANO;
2017-06-07 16:51:11 +00:00
AContrato. ID_FORMA_PAGO : = StrToInt( AppFactuGES. Configuracion. GetSettingAsString( teBD, CTE_FORMA_PAGO_BANO, AppFactuGES. EmpresaActiva. ID) ) ;
2011-11-18 17:12:39 +00:00
AFormasPago : = AFormasPagoController. Buscar( AContrato. ID_FORMA_PAGO) ;
AFormasPago. Open;
AContrato. FORMA_PAGO. Add( AFormasPago. DESCRIPCION) ;
2017-06-07 16:51:11 +00:00
AContrato. PLAZO_ENTREGA. Add( AppFactuGES. Configuracion. GetSettingAsString( teBD, CTE_PLAZOS_ENTREGA_BANO, AppFactuGES. EmpresaActiva. ID) ) ;
AContrato. OBSERVACIONES. Add( AppFactuGES. Configuracion. GetSettingAsString( teBD, CTE_OBSERVACIONES_BANO, AppFactuGES. EmpresaActiva. ID) ) ;
2011-11-14 17:40:41 +00:00
( Self. DetallesController as IDetallesContratoClienteController) . AnadirCapitulo( TIPO_CAPITULO_B, 'MUEBLE DE BA<42> O N<> ' , False , AContrato. Detalles) ;
( Self. DetallesController as IDetallesContratoClienteController) . AnadirCapitulo( TIPO_CAPITULO_V, 'IMPORTES ' , True , AContrato. Detalles) ;
end ;
teElectrodomestico:
begin
AContrato. TIPO_CONTRATO : = CTE_ELECTRODOMESTICO;
2017-06-07 16:51:11 +00:00
AContrato. ID_FORMA_PAGO : = StrToInt( AppFactuGES. Configuracion. GetSettingAsString( teBD, CTE_FORMA_PAGO_ELECTRODOMESTICO, AppFactuGES. EmpresaActiva. ID) ) ;
2011-11-18 17:12:39 +00:00
AFormasPago : = AFormasPagoController. Buscar( AContrato. ID_FORMA_PAGO) ;
AFormasPago. Open;
AContrato. FORMA_PAGO. Add( AFormasPago. DESCRIPCION) ;
2017-06-07 16:51:11 +00:00
AContrato. PLAZO_ENTREGA. Add( AppFactuGES. Configuracion. GetSettingAsString( teBD, CTE_PLAZOS_ENTREGA_ELECTRODOMESTICO, AppFactuGES. EmpresaActiva. ID) ) ;
AContrato. OBSERVACIONES. Add( AppFactuGES. Configuracion. GetSettingAsString( teBD, CTE_OBSERVACIONES_ELECTRODOMESTICO, AppFactuGES. EmpresaActiva. ID) ) ;
2011-11-14 17:40:41 +00:00
( Self. DetallesController as IDetallesContratoClienteController) . AnadirCapitulo( TIPO_CAPITULO_E, 'ELECTRODOM<4F> STICOS ' , False , AContrato. Detalles) ;
end ;
teVarios:
begin
AContrato. TIPO_CONTRATO : = CTE_VARIOS;
2017-06-07 16:51:11 +00:00
AContrato. ID_FORMA_PAGO : = StrToInt( AppFactuGES. Configuracion. GetSettingAsString( teBD, CTE_FORMA_PAGO_VARIOS, AppFactuGES. EmpresaActiva. ID) ) ;
2011-11-18 17:12:39 +00:00
AFormasPago : = AFormasPagoController. Buscar( AContrato. ID_FORMA_PAGO) ;
AFormasPago. Open;
AContrato. FORMA_PAGO. Add( AFormasPago. DESCRIPCION) ;
2017-06-07 16:51:11 +00:00
AContrato. PLAZO_ENTREGA. Add( AppFactuGES. Configuracion. GetSettingAsString( teBD, CTE_PLAZOS_ENTREGA_VARIOS, AppFactuGES. EmpresaActiva. ID) ) ;
AContrato. OBSERVACIONES. Add( AppFactuGES. Configuracion. GetSettingAsString( teBD, CTE_OBSERVACIONES_VARIOS, AppFactuGES. EmpresaActiva. ID) ) ;
2014-05-08 15:04:53 +00:00
( Self. DetallesController as IDetallesContratoClienteController) . AnadirCapitulo( TIPO_CAPITULO_V, 'VARIOS ' , True , AContrato. Detalles) ;
2011-11-14 17:40:41 +00:00
end ;
end ;
2011-11-18 17:12:39 +00:00
AFormasPago: = Nil ;
2017-06-07 16:51:11 +00:00
AFormasPagoController : = Nil ;
2011-11-14 17:40:41 +00:00
end ;
2011-11-18 17:12:39 +00:00
procedure TContratosClienteController. RecuperarCliente( AContrato: IBizContratoCliente) ;
2011-11-14 17:40:41 +00:00
begin
AContrato. _Cliente : = ( FClienteController. Buscar( AContrato. ID_Cliente) as IBizCliente) ;
end ;
function TContratosClienteController. Existe( const ID: Integer ) : Boolean ;
var
AContrato : IBizContratoCliente;
begin
try
AContrato : = Buscar( ID) ;
Result : = Assigned( AContrato) and ( AContrato. ID = ID) ;
finally
AContrato : = NIL ;
end ;
end ;
function TContratosClienteController. ExtraerSeleccionados( AContrato: IBizContratoCliente) : IBizContratoCliente;
var
ASeleccionados : IBizContratoCliente;
begin
ASeleccionados : = ( Self. Buscar( ID_NULO) as IBizContratoCliente) ;
CopyDataTableDA5( AContrato. DataTable, ASeleccionados. DataTable, True ) ;
Result : = ASeleccionados;
end ;
procedure TContratosClienteController. FiltrarAno( AContrato: IBizContratoCliente; ADynWhereDataTable: WideString ; const Ano: String ) ;
var
Condicion: TDAWhereExpression;
FechaIni: String ;
FechaFin: String ;
begin
AContrato. DataTable. DynamicWhere. Clear;
AContrato. DataTable. DynamicWhere. Xml : = ADynWhereDataTable;
if ( Ano < > 'Todos' ) then
begin
// Filtrar las facturas actuales por empresa
FechaIni : = '01/01/' + Ano;
FechaFin : = '31/12/' + Ano;
with AContrato. DataTable. DynamicWhere do
begin
// (FECHA_INICIO between FECHA_FIN)
Condicion : = NewBinaryExpression( NewField( '' , fld_ContratosClienteFECHA_CONTRATO) , NewConstant( FechaIni, datString) , dboGreaterOrEqual) ;
Condicion : = NewBinaryExpression( NewBinaryExpression( NewField( '' , fld_ContratosClienteFECHA_CONTRATO) , NewConstant( FechaFin, datString) , dboLessOrEqual) , Condicion, dboAnd) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Condicion, Expression, dboAnd) ;
end ;
end ;
end ;
procedure TContratosClienteController. FiltrarEmpresa( AContrato: IBizContratoCliente) ;
var
2013-05-17 12:34:32 +00:00
i: Integer ;
Condicion, Condicion2: TDAWhereExpression;
2011-11-14 17:40:41 +00:00
begin
if AContrato. DataTable. Active then
AContrato. DataTable. Active : = False ;
2013-05-17 12:34:32 +00:00
// Filtrar los presupuestos actuales por empresa
2011-11-14 17:40:41 +00:00
with AContrato. DataTable. DynamicWhere do
begin
// (ID_EMPRESA >= ID)
Condicion : = NewBinaryExpression( NewField( '' , fld_ContratosClienteID_EMPRESA) , NewConstant( AppFactuGES. EmpresaActiva. ID, datInteger) , dboEqual) ;
2013-05-17 12:34:32 +00:00
for i: = 0 to AppFactuGES. EmpresaActiva. EmpresasContratosComunes. Count - 1 do
begin
// (ID_EMPRESA >= ID)
Condicion2 : = NewBinaryExpression( NewField( '' , fld_ContratosClienteID_EMPRESA) , NewConstant( AppFactuGES. EmpresaActiva. EmpresasContratosComunes. Strings[ i] , datString) , dboEqual) ;
Condicion : = NewBinaryExpression( Condicion, Condicion2, dboOR) ;
end ;
2011-11-14 17:40:41 +00:00
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
end ;
procedure TContratosClienteController. SetClienteController( const Value: IClientesController) ;
begin
FClienteController : = Value;
end ;
procedure TContratosClienteController. SetDetallesController( const Value: IDetallesContratoClienteController) ;
begin
FDetallesController : = Value;
end ;
procedure TContratosClienteController. SetGestorDocumentosController(
const Value: IGestorDocumentosController) ;
begin
FGestorDocumentosController : = Value;
end ;
{
function TContratosClienteController. SubirFichero( const ID: Integer ; const NombreFichero: String ; const Fichero: Binary) : Boolean ;
begin
Result : = FDataModule. SubirFichero( ID, NombreFichero, Fichero) ;
end ;
}
function TContratosClienteController. Guardar( AContrato: IBizContratoCliente) : Boolean ;
begin
Result : = False ;
if not Assigned( AContrato) then
raise Exception. Create ( 'Contrato no asignada' ) ;
if not Assigned( FDetallesController) then
raise Exception. Create ( 'Controller detalles no asignado' ) ;
if ValidarContrato( AContrato) then
begin
ShowHourglassCursor;
// Asegurarnos de que todos los importes est<73> n bien.
RecalcularImportes( AContrato) ;
try
AContrato. DataTable. ApplyUpdates;
Result : = True ;
finally
HideHourglassCursor;
end ;
end ;
end ;
function TContratosClienteController. Localizar( AContratos: IBizContratoCliente;
const ID: Integer ) : Boolean ;
begin
Result : = True ;
ShowHourglassCursor;
try
with AContratos. DataTable do
begin
DisableControls;
First;
if not Locate( fld_ContratosClienteID, ID, [ ] ) then
Result : = False ;
EnableControls;
end ;
finally
HideHourglassCursor;
end ;
end ;
2021-02-26 08:52:27 +00:00
function TContratosClienteController. Nuevo( WithInsert: Boolean ) : IBizContratoCliente;
2011-11-14 17:40:41 +00:00
var
AContrato : IBizContratoCliente;
begin
AContrato : = FDataModule. NewItem;
FiltrarEmpresa( AContrato) ;
AContrato. DataTable. Active : = True ;
2021-02-26 08:52:27 +00:00
if WithInsert then
AContrato. Insert;
2011-11-14 17:40:41 +00:00
Result : = AContrato;
end ;
2013-06-19 09:44:10 +00:00
procedure TContratosClienteController. Preview( AContrato: IBizContratoCliente; AllItems: Boolean = false ; VerLogotipo: Boolean = true ;
const VerImprimirPrecios: Boolean = False ; const VerImprimirTotales: Boolean = False ; const VerImprimirRefProveedor: Boolean = False ;
const VerImprimirObservaciones: Boolean = False ; const VerImprimirIncidencias: Boolean = False ) ;
2011-11-14 17:40:41 +00:00
var
AReportController : IContratosClienteReportController;
ID_Contratos: TIntegerList;
begin
AReportController : = TContratosClienteReportController. Create;
try
ID_Contratos : = TIntegerList. Create;
//Si deseamos previsualizar todos los items del objeto contrato
if AllItems then
begin
with AContrato. DataTable do
begin
First;
while not EOF do
begin
ID_Contratos. Add( AContrato. ID) ;
Next;
end ;
end ;
end
//Solo previsualizamos el item seleccionado
else
ID_Contratos. Add( AContrato. ID) ;
2013-06-19 09:44:10 +00:00
AReportController. Preview( ID_Contratos, VerLogotipo, VerImprimirPrecios, VerImprimirTotales) ;
2011-11-14 17:40:41 +00:00
finally
AReportController : = NIL ;
FreeAndNil( ID_Contratos) ;
end ;
end ;
2013-06-19 09:44:10 +00:00
procedure TContratosClienteController. Print( AContrato: IBizContratoCliente; AllItems: Boolean = false ; VerLogotipo: Boolean = true ;
const VerImprimirPrecios: Boolean = False ; const VerImprimirTotales: Boolean = False ; const VerImprimirRefProveedor: Boolean = False ;
const VerImprimirObservaciones: Boolean = False ; const VerImprimirIncidencias: Boolean = False ) ;
2011-11-14 17:40:41 +00:00
var
AReportController : IContratosClienteReportController;
ID_Contratos: TIntegerList;
begin
AReportController : = TContratosClienteReportController. Create;
ID_Contratos : = TIntegerList. Create;
try
//Si deseamos imprimimos todos los items del objeto contrato
if AllItems then
begin
with AContrato. DataTable do
begin
First;
while not EOF do
begin
ID_Contratos. Add( AContrato. ID) ;
Next;
end ;
end ;
end
//Solo imprimimos el item seleccionado
else
ID_Contratos. Add( AContrato. ID) ;
2013-06-19 09:44:10 +00:00
AReportController. Print( ID_Contratos, VerLogotipo, VerImprimirPrecios, VerImprimirTotales) ;
2011-11-14 17:40:41 +00:00
finally
AReportController : = NIL ;
FreeANDNIL( ID_Contratos) ;
end ;
end ;
function TContratosClienteController. GetClienteController: IClientesController;
begin
Result : = FClienteController;
end ;
function TContratosClienteController. GetDetallesController: IDetallesContratoClienteController;
begin
Result : = FDetallesController;
end ;
function TContratosClienteController. GetGestorDocumentosController: IGestorDocumentosController;
begin
Result : = FGestorDocumentosController;
end ;
end .