2011-11-14 17:40:41 +00:00
unit uBizContratosCliente;
interface
uses
Classes, uDADataTable, uDAInterfaces, uROClasses,
schContratosClienteClient_Intf, uDBSelectionListUtils,
uBizContactos, uBizDetallesContratoCliente;
const
BIZ_CLIENT_CONTRATO_CLIENTE = 'Client.ContratoCliente' ;
BIZ_CLIENT_CONTRATOS_CLIENTE_BENEFICIOS = 'Client.ContratosClienteBeneficios' ;
SITUACION_CONTRATO_PENDIENTE = 'PENDIENTE' ;
SITUACION_CONTRATO_TERMINADO = 'TERMINADO' ;
type
IBizContratoCliente = interface( IContratosCliente)
[ '{3C12014E-6AD6-45BC-A87B-D818EDAB14C8}' ]
procedure SetCliente( AValue : IBizCliente) ;
function GetCliente : IBizCliente;
property Cliente : IBizCliente read GetCliente write SetCliente;
// Esta propidad es para que el controlador pueda acceder directamente
// a la propiedad Cliente
procedure _SetCliente( AValue : IBizCliente) ;
function _GetCliente : IBizCliente;
property _Cliente : IBizCliente read _GetCliente write _SetCliente;
function GetDetalles: IBizDetallesContratoCliente;
procedure SetDetalles( Value: IBizDetallesContratoCliente) ;
property Detalles: IBizDetallesContratoCliente read GetDetalles write SetDetalles;
procedure CalcularImporteTotal;
function EsNuevo : Boolean ;
function DarListaSituaciones: TStringList;
end ;
IBizContratosClienteBeneficios = interface( IContratosClienteBeneficios)
[ '{ABB58720-9FD2-4E85-AEAA-4E7DAA1E6223}' ]
end ;
TBizContratoCliente = class( TContratosClienteDataTableRules, IBizContratoCliente, ISeleccionable)
private
procedure CalcularBaseImponible;
procedure CalcularIVA;
procedure CalcularRE;
procedure AsignarTipoIVA ( IDTipoIVA : Integer ) ;
procedure AsignarVendedor;
protected
FSeleccionableInterface : ISeleccionable;
FCliente : IBizCliente;
FDetalles : IBizDetallesContratoCliente;
FDetallesLink : TDADataSource;
procedure SetCliente( AValue : IBizCliente) ;
function GetCliente : IBizCliente;
procedure _SetCliente( AValue : IBizCliente) ;
function _GetCliente : IBizCliente;
function GetDetalles: IBizDetallesContratoCliente;
procedure SetDetalles( Value: IBizDetallesContratoCliente) ;
function GetSITUACIONValue: String ; override ;
procedure SetFECHA_CONTRATOValue( const aValue: TDateTime) ; override ;
procedure SetID_FORMA_PAGOValue( const aValue: Integer ) ; override ;
procedure OnNewRecord( Sender: TDADataTable) ; override ;
procedure IniciarValoresContratoNuevo;
procedure RECARGO_EQUIVALENCIAOnChange( Sender: TDACustomField) ;
procedure ID_TIPO_IVAOnChange( Sender: TDACustomField) ;
procedure IMPORTE_NETOOnChange( Sender: TDACustomField) ;
procedure IMPORTE_PORTEOnChange( Sender: TDACustomField) ;
procedure DESCUENTOOnChange( Sender: TDACustomField) ;
procedure IVAOnChange( Sender: TDACustomField) ;
procedure REOnChange( Sender: TDACustomField) ;
procedure SetID_TIPO_IVAValue( const aValue: Integer ) ; override ;
public
function DarListaSituaciones: TStringList;
function EsNuevo : Boolean ;
procedure CalcularImporteTotal;
property Cliente : IBizCliente read GetCliente write SetCliente;
property _Cliente : IBizCliente read _GetCliente write _SetCliente;
property Detalles: IBizDetallesContratoCliente read GetDetalles write SetDetalles;
property SeleccionableInterface : ISeleccionable read FSeleccionableInterface
write FSeleccionableInterface implements ISeleccionable;
constructor Create( aDataTable: TDADataTable) ; override ;
destructor Destroy; override ;
end ;
TBizContratosClienteBeneficios = class( TContratosClienteBeneficiosDataTableRules, IBizContratosClienteBeneficios)
end ;
implementation
uses
2020-12-14 11:14:43 +00:00
SysUtils, Variants, uDataModuleConfiguracion, uDataModuleUsuarios, Dialogs, uNumutils,
2011-11-14 17:40:41 +00:00
uDataTableUtils, DateUtils, uDateUtils, DB, uFactuGES_App, uTiposIVAController,
2022-03-12 10:40:36 +00:00
uBizTiposIVA, uVendedoresController, uTypesConstConfiguration;
2011-11-14 17:40:41 +00:00
{ TBizContratoCliente }
procedure TBizContratoCliente. AsignarTipoIVA( IDTipoIVA: Integer ) ;
var
ATiposIVAController : ITiposIVAController;
ATipoIVA : IBizTipoIVA;
begin
inherited ;
ATiposIVAController : = TTiposIVAController. Create;
try
ATipoIVA : = ATiposIVAController. Buscar( IDTipoIVA) ;
ATipoIVA. DataTable. Active : = True ;
if Assigned( ATipoIVA) then
begin
Edit;
IVA : = ATipoIVA. IVA;
if ( RECARGO_EQUIVALENCIA = 1 ) then
RE : = ATipoIVA. RE
else
RE : = 0 ;
end ;
finally
ATiposIVAController : = NIL ;
end ;
end ;
procedure TBizContratoCliente. CalcularBaseImponible;
begin
if not Self. DataTable. Editing then
Edit;
2020-12-14 11:14:43 +00:00
IMPORTE_DESCUENTO : = roundCurrency( IMPORTE_NETO * ( DESCUENTO/ 1 0 0 ) ) ;
2011-11-14 17:40:41 +00:00
BASE_IMPONIBLE : = IMPORTE_NETO - IMPORTE_DESCUENTO + IMPORTE_PORTE;
end ;
procedure TBizContratoCliente. CalcularImporteTotal;
begin
DataTable. DisableControls;
DataTable. Fields. FieldEventsDisabled : = True ;
try
CalcularBaseImponible;
CalcularIVA;
CalcularRE;
if not Self. DataTable. Editing then
Edit;
2020-12-14 11:14:43 +00:00
IMPORTE_TOTAL : = roundCurrency( BASE_IMPONIBLE + IMPORTE_IVA + IMPORTE_RE) ;
2011-11-14 17:40:41 +00:00
finally
DataTable. Fields. FieldEventsDisabled : = False ;
DataTable. EnableControls;
end ;
end ;
procedure TBizContratoCliente. CalcularIVA;
begin
if not Self. DataTable. Editing then
Edit;
2020-12-14 11:14:43 +00:00
IMPORTE_IVA : = roundCurrency( ( IVA / 1 0 0 ) * ( BASE_IMPONIBLE) ) ;
2011-11-14 17:40:41 +00:00
end ;
procedure TBizContratoCliente. CalcularRE;
begin
if not Self. DataTable. Editing then
Edit;
2020-12-14 11:14:43 +00:00
IMPORTE_RE : = roundCurrency( ( RE / 1 0 0 ) * BASE_IMPONIBLE) ;
2011-11-14 17:40:41 +00:00
end ;
constructor TBizContratoCliente. Create( aDataTable: TDADataTable) ;
begin
inherited ;
FCliente : = Nil ;
with DataTable do
begin
FieldByName( fld_ContratosClienteID_TIPO_IVA) . OnChange : = ID_TIPO_IVAOnChange;
FieldByName( fld_ContratosClienteRECARGO_EQUIVALENCIA) . OnChange : = RECARGO_EQUIVALENCIAOnChange;
FieldByName( fld_ContratosClienteIMPORTE_NETO) . OnChange : = IMPORTE_NETOOnChange;
FieldByName( fld_ContratosClienteIMPORTE_PORTE) . OnChange : = IMPORTE_PORTEOnChange;
FieldByName( fld_ContratosClienteDESCUENTO) . OnChange : = DESCUENTOOnChange;
FieldByName( fld_ContratosClienteIVA) . OnChange : = IVAOnChange;
FieldByName( fld_ContratosClienteRE) . OnChange : = REOnChange;
end ;
FDetallesLink : = TDADataSource. Create( NIL ) ;
FDetallesLink. DataTable : = aDataTable;
FSeleccionableInterface : = TSeleccionable. Create( aDataTable) ;
end ;
function TBizContratoCliente. DarListaSituaciones: TStringList;
begin
Result : = TStringList. Create;
with Result do
begin
Add( SITUACION_CONTRATO_PENDIENTE) ;
Add( SITUACION_CONTRATO_TERMINADO) ;
end ;
end ;
procedure TBizContratoCliente. DESCUENTOOnChange( Sender: TDACustomField) ;
begin
CalcularImporteTotal;
end ;
destructor TBizContratoCliente. Destroy;
begin
FCliente : = NIL ;
FDetalles : = NIL ;
FDetallesLink. Free;
FSeleccionableInterface : = NIL ;
inherited ;
end ;
function TBizContratoCliente. EsNuevo: Boolean ;
begin
Result : = ( ID < 0 ) ;
end ;
function TBizContratoCliente. GetCliente: IBizCliente;
begin
Result : = FCliente;
end ;
procedure TBizContratoCliente. ID_TIPO_IVAOnChange( Sender: TDACustomField) ;
begin
AsignarTipoIVA( ID_TIPO_IVA) ;
end ;
procedure TBizContratoCliente. IMPORTE_NETOOnChange( Sender: TDACustomField) ;
begin
CalcularImporteTotal;
end ;
procedure TBizContratoCliente. IMPORTE_PORTEOnChange( Sender: TDACustomField) ;
begin
CalcularImporteTotal;
end ;
procedure TBizContratoCliente. IniciarValoresContratoNuevo;
begin
ID_EMPRESA : = AppFactuGES. EmpresaActiva. ID;
USUARIO : = AppFactuGES. UsuarioActivo. UserName;
2022-03-12 10:40:36 +00:00
ID_FORMA_PAGO : = AppFactuGES. EmpresaActiva. ID_FORMA_PAGO;
PLAZO_ENTREGA. Add( AppFactuGES. Configuracion. GetSettingAsString( teBD, CTE_PLAZOS_ENTREGA_CONTRATOS, AppFactuGES. EmpresaActiva. ID) ) ;
OBSERVACIONES. Add( AppFactuGES. Configuracion. GetSettingAsString( teBD, CTE_OBSERVACIONES_CONTRATOS, AppFactuGES. EmpresaActiva. ID) ) ;
2011-11-14 17:40:41 +00:00
ID_TIPO_IVA : = AppFactuGES. EmpresaActiva. ID_TIPO_IVA;
2022-03-12 10:40:36 +00:00
// Un contrato puede estar formado por n presupuestos y cada uno por un precio punto por lo que en el contrato no tiene sentido poner precio punto,
// a no ser que quieran establecer una politica de gestion.
// PRECIO_PUNTO := AppFactuGES.EmpresaActiva.PRECIO_PUNTO;
2011-11-14 17:40:41 +00:00
FECHA_CONTRATO : = DateOf( Date) ;
2020-12-14 11:14:43 +00:00
ID_DIRECCION_ENVIO : = 0 ;
2011-11-14 17:40:41 +00:00
INCIDENCIAS_ACTIVAS : = 0 ;
RE : = 0 ;
REFERENCIA : = '' ;
SITUACION : = SITUACION_CONTRATO_PENDIENTE;
ID_TIENDA : = AppFactuGES. TiendaActiva. ID;
TIENDA : = AppFactuGES. TiendaActiva. NOMBRE;
2020-12-14 11:14:43 +00:00
2017-06-07 16:51:11 +00:00
// Self.DataTable.FieldByName(fld_ContratosClienteFORMA_PAGO).AsString := AppFactuGES.FormaPagoDocumentos;
// Self.DataTable.FieldByName(fld_ContratosClienteOBSERVACIONES).AsString := AppFactuGES.ObservacionesDocumentos;
2011-11-14 17:40:41 +00:00
AsignarVendedor;
end ;
procedure TBizContratoCliente. AsignarVendedor;
var
AVendedoresController: IVendedoresController;
begin
AVendedoresController : = TVendedoresController. Create;
try
ID_VENDEDOR : = AVendedoresController. DarIDVendedorDeUsuario( AppFactuGES. UsuarioActivo. ID) ;
finally
AVendedoresController : = nil ;
end ;
end ;
procedure TBizContratoCliente. IVAOnChange( Sender: TDACustomField) ;
begin
CalcularImporteTotal;
end ;
function TBizContratoCliente. GetDetalles: IBizDetallesContratoCliente;
begin
Result : = FDetalles;
end ;
function TBizContratoCliente. GetSITUACIONValue: String ;
begin
result : = Trim( DataTable. Fields[ idx_ContratosClienteSITUACION] . AsString) ;
end ;
procedure TBizContratoCliente. OnNewRecord( Sender: TDADataTable) ;
begin
inherited ;
// ID := GetRecNo; // -1, -2, -3...
IniciarValoresContratoNuevo;
end ;
procedure TBizContratoCliente. RECARGO_EQUIVALENCIAOnChange(
Sender: TDACustomField) ;
begin
AsignarTipoIVA( ID_TIPO_IVA) ;
end ;
procedure TBizContratoCliente. REOnChange( Sender: TDACustomField) ;
begin
CalcularImporteTotal;
end ;
procedure TBizContratoCliente. SetCliente( AValue: IBizCliente) ;
var
bEnEdicion : Boolean ;
begin
FCliente : = AValue;
if Assigned( FCliente) then
begin
if not FCliente. DataTable. Active then
FCliente. DataTable. Active : = True ;
bEnEdicion : = ( DataTable. State in dsEditModes) ;
if not bEnEdicion then
DataTable. Edit;
ID_CLIENTE : = FCliente. ID;
NOMBRE : = FCliente. NOMBRE;
NIF_CIF : = FCliente. NIF_CIF;
CALLE : = FCliente. CALLE;
CODIGO_POSTAL : = FCliente. CODIGO_POSTAL;
PROVINCIA : = FCliente. PROVINCIA;
POBLACION : = FCliente. POBLACION;
TELEFONO : = FCliente. TELEFONO_1;
MOVIL : = FCliente. MOVIL_1;
2020-12-14 11:14:43 +00:00
//Establecemos como direcci<63> n de envio por defecto la direcci<63> n fiscal del cliente
ID_DIRECCION_ENVIO : = 1 ;
CALLE_ENVIO : = FCliente. CALLE;
CODIGO_POSTAL_ENVIO : = FCliente. CODIGO_POSTAL;
PROVINCIA_ENVIO : = FCliente. PROVINCIA;
POBLACION_ENVIO : = FCliente. POBLACION;
TLFS_ENVIO : = FCliente. TELEFONO_1 + ' / ' + FCliente. MOVIL_1;
PERS_CONTACTO_ENVIO : = FCliente. NOMBRE;
2017-06-07 16:51:11 +00:00
// La forma de pago se establece desde el tipo de documento y aunque cambie de cliente no se cambia la formade pago ya que desde la vista se pregunta y se cambia si el usuario lo desea
2011-11-18 17:12:39 +00:00
// if FCliente.ID_FORMA_PAGO > 0 then
// ID_FORMA_PAGO := FCliente.ID_FORMA_PAGO;
2011-11-14 17:40:41 +00:00
if FCliente. ID_TIPO_IVA > 0 then
ID_TIPO_IVA : = FCliente. ID_TIPO_IVA;
RECARGO_EQUIVALENCIA : = FCliente. RECARGO_EQUIVALENCIA;
2013-04-25 17:15:39 +00:00
// Se establece un descuento especial general a petici<63> n de angelica
DESCUENTO : = FCliente. DESCUENTO;
2011-11-14 17:40:41 +00:00
DataTable. Post; //Muy importante ya que es necesario hacer un post de la cabecera antes de a<> adir detalles
//si se quita el id de la cabecera y los detalles se desincroniza
if bEnEdicion then
DataTable. Edit;
end ;
end ;
procedure TBizContratoCliente. SetDetalles( Value: IBizDetallesContratoCliente) ;
begin
FDetalles : = Value;
EnlazarMaestroDetalle( FDetallesLink, FDetalles) ;
end ;
procedure TBizContratoCliente. SetFECHA_CONTRATOValue( const aValue: TDateTime) ;
begin
if EsFechaVacia( aValue) then
SetFieldNull( DataTable, fld_ContratosClienteFECHA_CONTRATO)
else
inherited ;
end ;
procedure TBizContratoCliente. SetID_FORMA_PAGOValue( const aValue: Integer ) ;
begin
if ( aValue = 0 ) then
SetFieldNull( DataTable, fld_ContratosClienteID_FORMA_PAGO)
else
inherited ;
end ;
procedure TBizContratoCliente. SetID_TIPO_IVAValue( const aValue: Integer ) ;
begin
if ( aValue = 0 ) then
SetFieldNull( DataTable, fld_ContratosClienteID_TIPO_IVA)
else
inherited ;
end ;
{
procedure TBizContratoCliente. SetINCIDENCIASValue( const aValue: IROStrings) ;
begin
if not Assigned( aValue) then
SetFieldNull( DataTable, fld_ContratosClienteINCIDENCIAS)
else
inherited ;
end ;
}
function TBizContratoCliente. _GetCliente: IBizCliente;
begin
Result : = FCliente;
end ;
procedure TBizContratoCliente. _SetCliente( AValue: IBizCliente) ;
begin
FCliente : = AValue;
end ;
initialization
RegisterDataTableRules( BIZ_CLIENT_CONTRATO_CLIENTE, TBizContratoCliente) ;
RegisterDataTableRules( BIZ_CLIENT_CONTRATOS_CLIENTE_BENEFICIOS, TBizContratosClienteBeneficios) ;
finalization
end .