2011-11-14 17:40:41 +00:00
unit uBizPresupuestosCliente;
interface
uses
Classes, uDADataTable, uDAInterfaces, uROClasses,
schPresupuestosClienteClient_Intf, uDBSelectionListUtils,
uBizContactos, uBizDetallesPresupuestoCliente;
const
BIZ_CLIENT_PRESUPUESTO_CLIENTE = 'Client.PresupuestoCliente' ;
SITUACION_PRESUPUESTO_PENDIENTE = 'PENDIENTE' ;
SITUACION_PRESUPUESTO_ACEPTADO = 'ACEPTADO' ;
SITUACION_PRESUPUESTO_ANULADO = 'ANULADO' ;
type
IBizPresupuestoCliente = interface( IPresupuestosCliente)
[ '{86A2FAD7-D125-47C2-B0BA-52A42FDFA6F6}' ]
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: IBizDetallesPresupuestoCliente;
procedure SetDetalles( Value: IBizDetallesPresupuestoCliente) ;
property Detalles: IBizDetallesPresupuestoCliente read GetDetalles write SetDetalles;
procedure CalcularImporteTotal;
function EsNuevo : Boolean ;
function DarListaSituaciones: TStringList;
end ;
TBizPresupuestoCliente = class( TPresupuestosClienteDataTableRules, IBizPresupuestoCliente, ISeleccionable)
private
procedure CalcularBaseImponible;
procedure CalcularIVA;
procedure CalcularRE;
procedure AsignarTipoIVA ( IDTipoIVA : Integer ) ;
procedure AsignarVendedor;
protected
FSeleccionableInterface : ISeleccionable;
FCliente : IBizCliente;
FDetalles : IBizDetallesPresupuestoCliente;
FDetallesLink : TDADataSource;
procedure SetCliente( AValue : IBizCliente) ;
function GetCliente : IBizCliente;
procedure _SetCliente( AValue : IBizCliente) ;
function _GetCliente : IBizCliente;
function GetDetalles: IBizDetallesPresupuestoCliente;
procedure SetDetalles( Value: IBizDetallesPresupuestoCliente) ;
function GetSITUACIONValue: String ; override ;
procedure SetFECHA_PRESUPUESTOValue( const aValue: TDateTime) ; override ;
procedure SetID_FORMA_PAGOValue( const aValue: Integer ) ; override ;
procedure OnNewRecord( Sender: TDADataTable) ; override ;
procedure IniciarValoresPresupuestoNuevo;
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: IBizDetallesPresupuestoCliente read GetDetalles write SetDetalles;
property SeleccionableInterface : ISeleccionable read FSeleccionableInterface
write FSeleccionableInterface implements ISeleccionable;
constructor Create( aDataTable: TDADataTable) ; override ;
destructor Destroy; override ;
end ;
implementation
uses
2022-03-12 10:40:36 +00:00
uTypesConstConfiguration, uDialogUtils, Windows, SysUtils, Variants, uDataModuleConfiguracion, uDataModuleUsuarios, Dialogs,
uDataTableUtils, DateUtils, uDateUtils, DB, uFactuGES_App, uNumUtils,
2011-11-14 17:40:41 +00:00
uTiposIVAController, uBizTiposIVA, uVendedoresController;
{ TBizPresupuestoCliente }
procedure TBizPresupuestoCliente. 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 TBizPresupuestoCliente. 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 TBizPresupuestoCliente. CalcularImporteTotal;
begin
DataTable. DisableControls;
DataTable. Fields. FieldEventsDisabled : = True ;
try
CalcularBaseImponible;
CalcularIVA;
CalcularRE;
if not Self. DataTable. Editing then
Edit;
IMPORTE_TOTAL : = BASE_IMPONIBLE + IMPORTE_IVA + IMPORTE_RE;
finally
DataTable. Fields. FieldEventsDisabled : = False ;
DataTable. EnableControls;
end ;
end ;
procedure TBizPresupuestoCliente. 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 TBizPresupuestoCliente. 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 TBizPresupuestoCliente. Create( aDataTable: TDADataTable) ;
begin
inherited ;
FCliente : = Nil ;
with DataTable do
begin
FieldByName( fld_PresupuestosClienteID_TIPO_IVA) . OnChange : = ID_TIPO_IVAOnChange;
FieldByName( fld_PresupuestosClienteRECARGO_EQUIVALENCIA) . OnChange : = RECARGO_EQUIVALENCIAOnChange;
FieldByName( fld_PresupuestosClienteIMPORTE_NETO) . OnChange : = IMPORTE_NETOOnChange;
FieldByName( fld_PresupuestosClienteIMPORTE_PORTE) . OnChange : = IMPORTE_PORTEOnChange;
FieldByName( fld_PresupuestosClienteDESCUENTO) . OnChange : = DESCUENTOOnChange;
FieldByName( fld_PresupuestosClienteIVA) . OnChange : = IVAOnChange;
FieldByName( fld_PresupuestosClienteRE) . OnChange : = REOnChange;
end ;
FDetallesLink : = TDADataSource. Create( NIL ) ;
FDetallesLink. DataTable : = aDataTable;
FSeleccionableInterface : = TSeleccionable. Create( aDataTable) ;
end ;
function TBizPresupuestoCliente. DarListaSituaciones: TStringList;
begin
Result : = TStringList. Create;
with Result do
begin
Add( SITUACION_PRESUPUESTO_PENDIENTE) ;
Add( SITUACION_PRESUPUESTO_ACEPTADO) ;
Add( SITUACION_PRESUPUESTO_ANULADO) ;
end ;
end ;
procedure TBizPresupuestoCliente. DESCUENTOOnChange( Sender: TDACustomField) ;
begin
CalcularImporteTotal;
end ;
destructor TBizPresupuestoCliente. Destroy;
begin
FCliente : = NIL ;
FDetalles : = NIL ;
FDetallesLink. Free;
FSeleccionableInterface : = NIL ;
inherited ;
end ;
procedure TBizPresupuestoCliente. AsignarVendedor;
var
AVendedoresController: IVendedoresController;
begin
AVendedoresController : = TVendedoresController. Create;
try
ID_VENDEDOR : = AVendedoresController. DarIDVendedorDeUsuario( AppFactuGES. UsuarioActivo. ID) ;
finally
AVendedoresController : = nil ;
end ;
end ;
function TBizPresupuestoCliente. EsNuevo: Boolean ;
begin
Result : = ( ID < 0 ) ;
end ;
function TBizPresupuestoCliente. GetCliente: IBizCliente;
begin
Result : = FCliente;
end ;
procedure TBizPresupuestoCliente. ID_TIPO_IVAOnChange( Sender: TDACustomField) ;
begin
AsignarTipoIVA( ID_TIPO_IVA) ;
end ;
procedure TBizPresupuestoCliente. IMPORTE_NETOOnChange( Sender: TDACustomField) ;
begin
CalcularImporteTotal;
end ;
procedure TBizPresupuestoCliente. IMPORTE_PORTEOnChange( Sender: TDACustomField) ;
begin
CalcularImporteTotal;
end ;
procedure TBizPresupuestoCliente. IniciarValoresPresupuestoNuevo;
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_PRESUPUESTOS, AppFactuGES. EmpresaActiva. ID) ) ;
OBSERVACIONES. Add( AppFactuGES. Configuracion. GetSettingAsString( teBD, CTE_OBSERVACIONES_PRESUPUESTOS, AppFactuGES. EmpresaActiva. ID) ) ;
2011-11-14 17:40:41 +00:00
ID_TIPO_IVA : = AppFactuGES. EmpresaActiva. ID_TIPO_IVA;
2018-03-26 16:26:46 +00:00
PRECIO_PUNTO : = AppFactuGES. EmpresaActiva. PRECIO_PUNTO;
2011-11-14 17:40:41 +00:00
FECHA_PRESUPUESTO : = DateOf( Date) ;
FECHA_VIGENCIA : = IncMonth( Date, AppFactuGES. EmpresaActiva. VALIDEZ_PRESUPUESTOS) ;
NO_VALORADO : = 0 ;
INCIDENCIAS_ACTIVAS : = 0 ;
RE : = 0 ;
REFERENCIA : = '' ;
SITUACION : = SITUACION_PRESUPUESTO_PENDIENTE;
ID_TIENDA : = AppFactuGES. TiendaActiva. ID;
TIENDA : = AppFactuGES. TiendaActiva. NOMBRE;
AsignarVendedor;
end ;
procedure TBizPresupuestoCliente. IVAOnChange( Sender: TDACustomField) ;
begin
CalcularImporteTotal;
end ;
function TBizPresupuestoCliente. GetDetalles: IBizDetallesPresupuestoCliente;
begin
Result : = FDetalles;
end ;
function TBizPresupuestoCliente. GetSITUACIONValue: String ;
begin
result : = Trim( DataTable. Fields[ idx_PresupuestosClienteSITUACION] . AsString) ;
end ;
procedure TBizPresupuestoCliente. OnNewRecord( Sender: TDADataTable) ;
begin
inherited ;
// ID := GetRecNo; // -1, -2, -3...
IniciarValoresPresupuestoNuevo;
end ;
procedure TBizPresupuestoCliente. RECARGO_EQUIVALENCIAOnChange(
Sender: TDACustomField) ;
begin
AsignarTipoIVA( ID_TIPO_IVA) ;
end ;
procedure TBizPresupuestoCliente. REOnChange( Sender: TDACustomField) ;
begin
CalcularImporteTotal;
end ;
procedure TBizPresupuestoCliente. SetCliente( AValue: IBizCliente) ;
var
bEnEdicion : Boolean ;
begin
FCliente : = AValue;
if Assigned( FCliente) then
begin
if not FCliente. DataTable. Active then
FCliente. DataTable. Active : = True ;
if ID_Cliente < > FCliente. ID then
begin
bEnEdicion : = ( DataTable. State in dsEditModes) ;
if not bEnEdicion then
DataTable. Edit;
ID_CLIENTE : = FCliente. ID;
2013-09-25 17:13:02 +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
// if FCliente.ID_FORMA_PAGO > 0 then
// ID_FORMA_PAGO := FCliente.ID_FORMA_PAGO;
2013-04-25 17:15:39 +00:00
// Se establece un descuento especial general a petici<63> n de angelica
DESCUENTO : = FCliente. DESCUENTO;
2022-03-15 16:08:43 +00:00
// Se establece precio de punto por cliente a petici<63> n de Ruben
PRECIO_PUNTO : = FCliente. PRECIO_PUNTO;
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 ;
end ;
procedure TBizPresupuestoCliente. SetDetalles( Value: IBizDetallesPresupuestoCliente) ;
begin
FDetalles : = Value;
EnlazarMaestroDetalle( FDetallesLink, FDetalles) ;
end ;
procedure TBizPresupuestoCliente. SetFECHA_PRESUPUESTOValue( const aValue: TDateTime) ;
begin
if EsFechaVacia( aValue) then
SetFieldNull( DataTable, fld_PresupuestosClienteFECHA_PRESUPUESTO)
else
inherited ;
end ;
procedure TBizPresupuestoCliente. SetID_FORMA_PAGOValue( const aValue: Integer ) ;
begin
if ( aValue = 0 ) then
SetFieldNull( DataTable, fld_PresupuestosClienteID_FORMA_PAGO)
else
inherited ;
end ;
procedure TBizPresupuestoCliente. SetID_TIPO_IVAValue( const aValue: Integer ) ;
begin
if ( aValue = 0 ) then
SetFieldNull( DataTable, fld_PresupuestosClienteID_TIPO_IVA)
else
inherited ;
end ;
{
procedure TBizPresupuestoCliente. SetINCIDENCIASValue( const aValue: IROStrings) ;
begin
if not Assigned( aValue) then
SetFieldNull( DataTable, fld_PresupuestosClienteINCIDENCIAS)
else
inherited ;
end ;
}
function TBizPresupuestoCliente. _GetCliente: IBizCliente;
begin
Result : = FCliente;
end ;
procedure TBizPresupuestoCliente. _SetCliente( AValue: IBizCliente) ;
begin
FCliente : = AValue;
end ;
initialization
RegisterDataTableRules( BIZ_CLIENT_PRESUPUESTO_CLIENTE, TBizPresupuestoCliente) ;
finalization
end .