FactuGES2/Source/Modulos/Albaranes de cliente/Model/uBizAlbaranesCliente.pas
2007-11-28 17:40:31 +00:00

334 lines
9.4 KiB
ObjectPascal
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

unit uBizAlbaranesCliente;
interface
uses
Classes, uDADataTable, schAlbaranesClienteClient_Intf, uDBSelectionListUtils,
uBizContactos, uBizDetallesAlbaranCliente, uROClasses, uDAInterfaces;
const
BIZ_CLIENT_ALBARAN_CLIENTE = 'Client.AlbaranCliente';
CTE_TIPO_ALBARAN = 'A';
CTE_TIPO_ALBARAN_DEV = 'D';
SITUACION_ALBARAN_PENDIENTE = 'PENDIENTE';
SITUACION_ALBARAN_ENVIADO = 'ENVIADO';
SITUACION_ALBARAN_SERVIDO = 'SERVIDO';
type
IBizAlbaranCliente = interface(IAlbaranesCliente)
['{BC9BC56D-E137-46F8-A752-58D7F78DAAE8}']
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: IBizDetallesAlbaranCliente;
procedure SetDetalles(Value: IBizDetallesAlbaranCliente);
property Detalles: IBizDetallesAlbaranCliente read GetDetalles write SetDetalles;
function EsNuevo : Boolean;
end;
TBizAlbaranCliente = class(TAlbaranesClienteDataTableRules, IBizAlbaranCliente, ISeleccionable)
private
procedure CalcularBaseImponible;
procedure CalcularIVA;
protected
FSeleccionableInterface : ISeleccionable;
FCliente : IBizCliente;
FDetalles : IBizDetallesAlbaranCliente;
FDetallesLink : TDADataSource;
procedure SetCliente(AValue : IBizCliente);
function GetCliente : IBizCliente;
procedure _SetCliente(AValue : IBizCliente);
function _GetCliente : IBizCliente;
function GetDetalles: IBizDetallesAlbaranCliente;
procedure SetDetalles(Value: IBizDetallesAlbaranCliente);
function GetSITUACIONValue: String; override;
procedure SetFECHA_ALBARANValue(const aValue: TDateTime); override;
procedure SetFECHA_ENVIOValue(const aValue: TDateTime); override;
procedure SetFECHA_RECEPCIONValue(const aValue: TDateTime); override;
procedure SetFECHA_PREVISTA_ENVIOValue(const aValue: TDateTime); override;
// procedure SetINCIDENCIASValue(const aValue: IROStrings); override;
procedure SetID_PEDIDOValue(const aValue: Integer); override;
procedure SetID_FACTURAValue(const aValue: Integer); override;
procedure SetID_FORMA_PAGOValue(const aValue: Integer); override;
procedure IMPORTE_NETOOnChange(Sender: TDACustomField);
procedure IMPORTE_PORTEOnChange(Sender: TDACustomField);
procedure DESCUENTOOnChange(Sender: TDACustomField);
procedure IVAOnChange(Sender: TDACustomField);
procedure OnNewRecord(Sender: TDADataTable); override;
procedure IniciarValoresAlbaranNuevo;
public
function EsNuevo : Boolean;
procedure CalcularImporteTotal;
property Cliente : IBizCliente read GetCliente write SetCliente;
property _Cliente : IBizCliente read _GetCliente write _SetCliente;
property Detalles: IBizDetallesAlbaranCliente read GetDetalles write SetDetalles;
property SeleccionableInterface : ISeleccionable read FSeleccionableInterface
write FSeleccionableInterface implements ISeleccionable;
constructor Create(aDataTable: TDADataTable); override;
destructor Destroy; override;
end;
implementation
uses
SysUtils, Variants, uDataModuleConfiguracion, uDataModuleUsuarios,
uDataTableUtils, DateUtils, uDateUtils, DB, uFactuGES_App;
{ TBizAlbaranCliente }
procedure TBizAlbaranCliente.CalcularBaseImponible;
begin
if not Self.DataTable.Editing then
Edit;
IMPORTE_DESCUENTO := IMPORTE_NETO * (DESCUENTO/100);
BASE_IMPONIBLE := IMPORTE_NETO - IMPORTE_DESCUENTO + IMPORTE_PORTE;
end;
procedure TBizAlbaranCliente.CalcularImporteTotal;
begin
DataTable.DisableControls;
DataTable.Fields.FieldEventsDisabled := True;
try
CalcularBaseImponible;
CalcularIVA;
if not Self.DataTable.Editing then
Edit;
IMPORTE_TOTAL := BASE_IMPONIBLE + IMPORTE_IVA;
finally
DataTable.Fields.FieldEventsDisabled := False;
DataTable.EnableControls;
end;
end;
procedure TBizAlbaranCliente.CalcularIVA;
begin
if not Self.DataTable.Editing then
Edit;
IMPORTE_IVA := (IVA / 100) * (BASE_IMPONIBLE);
end;
constructor TBizAlbaranCliente.Create(aDataTable: TDADataTable);
begin
inherited;
FCliente := Nil;
FDetallesLink := TDADataSource.Create(NIL);
FDetallesLink.DataTable := aDataTable;
with DataTable do
begin
FieldByName(fld_AlbaranesClienteIMPORTE_NETO).OnChange := IMPORTE_NETOOnChange;
FieldByName(fld_AlbaranesClienteIMPORTE_PORTE).OnChange := IMPORTE_PORTEOnChange;
FieldByName(fld_AlbaranesClienteDESCUENTO).OnChange := DESCUENTOOnChange;
FieldByName(fld_AlbaranesClienteIVA).OnChange := IVAOnChange;
end;
FSeleccionableInterface := TSeleccionable.Create(aDataTable);
end;
procedure TBizAlbaranCliente.DESCUENTOOnChange(Sender: TDACustomField);
begin
CalcularImporteTotal;
end;
destructor TBizAlbaranCliente.Destroy;
begin
FCliente := NIL;
FDetalles := NIL;
FDetallesLink.Free;
FSeleccionableInterface := NIL;
inherited;
end;
function TBizAlbaranCliente.EsNuevo: Boolean;
begin
Result := (ID < 0);
end;
function TBizAlbaranCliente.GetCliente: IBizCliente;
begin
Result := FCliente;
end;
procedure TBizAlbaranCliente.IMPORTE_NETOOnChange(Sender: TDACustomField);
begin
CalcularImporteTotal;
end;
procedure TBizAlbaranCliente.IMPORTE_PORTEOnChange(Sender: TDACustomField);
begin
CalcularImporteTotal;
end;
procedure TBizAlbaranCliente.IniciarValoresAlbaranNuevo;
begin
ID_EMPRESA := AppFactuGES.EmpresaActiva.ID;
USUARIO := AppFactuGES.UsuarioActivo.UserName;
FECHA_ALBARAN := DateOf(Date);
INCIDENCIAS_ACTIVAS := 0;
SITUACION := SITUACION_ALBARAN_PENDIENTE;
REFERENCIA := '';
TIPO := CTE_TIPO_ALBARAN;
// ALMAC<41>N PUESTO A CAP<41>N Y PROVISIONAL
ID_ALMACEN := 2;
end;
procedure TBizAlbaranCliente.IVAOnChange(Sender: TDACustomField);
begin
CalcularImporteTotal;
end;
function TBizAlbaranCliente.GetDetalles: IBizDetallesAlbaranCliente;
begin
Result := FDetalles;
end;
function TBizAlbaranCliente.GetSITUACIONValue: String;
begin
result := Trim(DataTable.Fields[idx_AlbaranesClienteSITUACION].AsString);
end;
procedure TBizAlbaranCliente.OnNewRecord(Sender: TDADataTable);
begin
inherited;
IniciarValoresAlbaranNuevo;
end;
procedure TBizAlbaranCliente.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;
ID_FORMA_PAGO := FCliente.ID_FORMA_PAGO;
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 TBizAlbaranCliente.SetDetalles(Value: IBizDetallesAlbaranCliente);
begin
FDetalles := Value;
EnlazarMaestroDetalle(FDetallesLink, FDetalles);
end;
procedure TBizAlbaranCliente.SetFECHA_ALBARANValue(const aValue: TDateTime);
begin
if EsFechaVacia(aValue) then
SetFieldNull(DataTable, fld_AlbaranesClienteFECHA_ALBARAN)
else
inherited;
end;
procedure TBizAlbaranCliente.SetFECHA_ENVIOValue(const aValue: TDateTime);
begin
if EsFechaVacia(aValue) then
SetFieldNull(DataTable, fld_AlbaranesClienteFECHA_ENVIO)
else
inherited;
end;
procedure TBizAlbaranCliente.SetFECHA_PREVISTA_ENVIOValue(const aValue: TDateTime);
begin
if EsFechaVacia(aValue) then
SetFieldNull(DataTable, fld_AlbaranesClienteFECHA_PREVISTA_ENVIO)
else
inherited;
end;
procedure TBizAlbaranCliente.SetFECHA_RECEPCIONValue(const aValue: TDateTime);
begin
if EsFechaVacia(aValue) then
SetFieldNull(DataTable, fld_AlbaranesClienteFECHA_RECEPCION)
else
inherited;
end;
procedure TBizAlbaranCliente.SetID_FACTURAValue(const aValue: Integer);
begin
if (aValue = 0) then
SetFieldNull(DataTable, fld_AlbaranesClienteID_FACTURA)
else
inherited;
end;
procedure TBizAlbaranCliente.SetID_FORMA_PAGOValue(const aValue: Integer);
begin
if (aValue = 0) then
SetFieldNull(DataTable, fld_AlbaranesClienteID_FORMA_PAGO)
else
inherited;
end;
procedure TBizAlbaranCliente.SetID_PEDIDOValue(const aValue: Integer);
begin
if (aValue = 0) then
SetFieldNull(DataTable, fld_AlbaranesClienteID_PEDIDO)
else
inherited;
end;
{
procedure TBizAlbaranCliente.SetINCIDENCIASValue(const aValue: IROStrings);
begin
if not Assigned(aValue) then
SetFieldNull(DataTable, fld_AlbaranesClienteINCIDENCIAS)
else
inherited;
end;
}
function TBizAlbaranCliente._GetCliente: IBizCliente;
begin
Result := FCliente;
end;
procedure TBizAlbaranCliente._SetCliente(AValue: IBizCliente);
begin
FCliente := AValue;
end;
initialization
RegisterDataTableRules(BIZ_CLIENT_ALBARAN_CLIENTE, TBizAlbaranCliente);
finalization
end.