Tecsitel_FactuGES2/Source/Modulos/Pedidos a proveedor/Model/uBizPedidosProveedor.pas

333 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 uBizPedidosProveedor;
interface
uses
Classes, uDADataTable, uDAInterfaces, uROClasses,
schPedidosProveedorClient_Intf, uDBSelectionListUtils,
uBizContactos, uBizDetallesPedidoProveedor;
const
BIZ_CLIENT_PEDIDO_PROVEEDOR = 'Client.PedidoProveedor';
SITUACION_PEDIDO_PENDIENTE = 'PENDIENTE';
SITUACION_PEDIDO_PARCIAL = 'PARCIAL';
SITUACION_PEDIDO_RECIBIDO = 'RECIBIDO';
type
IBizPedidoProveedor = interface(IPedidosProveedor)
['{513FE06A-48B8-4FA6-8D1D-0DD48EAD9352}']
procedure SetProveedor(AValue : IBizProveedor);
function GetProveedor : IBizProveedor;
property Proveedor : IBizProveedor read GetProveedor write SetProveedor;
// Esta propidad es para que el controlador pueda acceder directamente
// a la propiedad Proveedor
procedure _SetProveedor(AValue : IBizProveedor);
function _GetProveedor : IBizProveedor;
property _Proveedor : IBizProveedor read _GetProveedor write _SetProveedor;
function GetDetalles: IBizDetallesPedidoProveedor;
procedure SetDetalles(Value: IBizDetallesPedidoProveedor);
property Detalles: IBizDetallesPedidoProveedor read GetDetalles write SetDetalles;
function EsNuevo : Boolean;
function DarListaSituaciones: TStringList;
end;
TBizPedidoProveedor = class(TPedidosProveedorDataTableRules, IBizPedidoProveedor, ISeleccionable)
private
procedure CalcularBaseImponible;
procedure CalcularIVA;
protected
FSeleccionableInterface : ISeleccionable;
FProveedor : IBizProveedor;
FDetalles : IBizDetallesPedidoProveedor;
FDetallesLink : TDADataSource;
procedure SetProveedor(AValue : IBizProveedor);
function GetProveedor : IBizProveedor;
procedure _SetProveedor(AValue : IBizProveedor);
function _GetProveedor : IBizProveedor;
function GetDetalles: IBizDetallesPedidoProveedor;
procedure SetDetalles(Value: IBizDetallesPedidoProveedor);
procedure SetFECHA_ENVIOValue(const aValue: TDateTime); override;
procedure SetFECHA_CONFIRMACIONValue(const aValue: TDateTime); override;
procedure SetFECHA_ENTREGAValue(const aValue: TDateTime); override;
procedure SetFECHA_PEDIDOValue(const aValue: TDateTime); override;
procedure SetID_PEDIDO_CLIENTEValue(const aValue: Integer); override;
// procedure SetINCIDENCIASValue(const aValue: IROStrings); 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 IniciarValoresPedidoNuevo;
public
procedure CalcularImporteTotal;
function DarListaSituaciones: TStringList;
function EsNuevo : Boolean;
property Proveedor : IBizProveedor read GetProveedor write SetProveedor;
property _Proveedor : IBizProveedor read _GetProveedor write _SetProveedor;
property Detalles: IBizDetallesPedidoProveedor 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;
{ TBizPedidoProveedor }
procedure TBizPedidoProveedor.CalcularBaseImponible;
begin
if not Self.DataTable.Editing then
Edit;
IMPORTE_DESCUENTO := IMPORTE_NETO * (DESCUENTO/100);
BASE_IMPONIBLE := IMPORTE_NETO - IMPORTE_DESCUENTO; // + IMPORTE_PORTE; no se suma porque ya se desglosa en los articulos
end;
procedure TBizPedidoProveedor.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 TBizPedidoProveedor.CalcularIVA;
begin
if not Self.DataTable.Editing then
Edit;
IMPORTE_IVA := (IVA / 100) * (BASE_IMPONIBLE);
end;
constructor TBizPedidoProveedor.Create(aDataTable: TDADataTable);
begin
inherited;
FProveedor := Nil;
with DataTable do
begin
FieldByName(fld_PedidosProveedorIMPORTE_NETO).OnChange := IMPORTE_NETOOnChange;
FieldByName(fld_PedidosProveedorIMPORTE_PORTE).OnChange := IMPORTE_PORTEOnChange;
FieldByName(fld_PedidosProveedorDESCUENTO).OnChange := DESCUENTOOnChange;
FieldByName(fld_PedidosProveedorIVA).OnChange := IVAOnChange;
end;
FDetallesLink := TDADataSource.Create(NIL);
FDetallesLink.DataTable := aDataTable;
FSeleccionableInterface := TSeleccionable.Create(aDataTable);
end;
function TBizPedidoProveedor.DarListaSituaciones: TStringList;
begin
Result := TStringList.Create;
with Result do
begin
Add(SITUACION_PEDIDO_PENDIENTE);
Add(SITUACION_PEDIDO_PARCIAL);
Add(SITUACION_PEDIDO_RECIBIDO);
end;
end;
procedure TBizPedidoProveedor.DESCUENTOOnChange(Sender: TDACustomField);
begin
CalcularImporteTotal;
end;
destructor TBizPedidoProveedor.Destroy;
begin
FProveedor := NIL;
FDetalles := NIL;
FDetallesLink.Free;
FSeleccionableInterface := NIL;
inherited;
end;
function TBizPedidoProveedor.EsNuevo: Boolean;
begin
Result := (ID < 0);
end;
function TBizPedidoProveedor.GetProveedor: IBizProveedor;
begin
Result := FProveedor;
end;
procedure TBizPedidoProveedor.IMPORTE_NETOOnChange(Sender: TDACustomField);
begin
CalcularImporteTotal;
end;
procedure TBizPedidoProveedor.IMPORTE_PORTEOnChange(Sender: TDACustomField);
begin
CalcularImporteTotal;
end;
procedure TBizPedidoProveedor.IniciarValoresPedidoNuevo;
begin
ID_EMPRESA := AppFactuGES.EmpresaActiva.ID;
USUARIO := AppFactuGES.UsuarioActivo.UserName;
FECHA_PEDIDO := DateOf(Date);
SITUACION := SITUACION_PEDIDO_PENDIENTE;
INCIDENCIAS_ACTIVAS := 0;
// ID_PEDIDO_CLIENTE := 0;
REF_PED_CLIENTE := '';
// OJOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
// ALMAC<41>N PUESTO A CAP<41>N Y PROVISIONAL
ID_ALMACEN := 2;
end;
procedure TBizPedidoProveedor.IVAOnChange(Sender: TDACustomField);
begin
CalcularImporteTotal;
end;
function TBizPedidoProveedor.GetDetalles: IBizDetallesPedidoProveedor;
begin
Result := FDetalles;
end;
procedure TBizPedidoProveedor.OnNewRecord(Sender: TDADataTable);
begin
inherited;
IniciarValoresPedidoNuevo;
end;
procedure TBizPedidoProveedor.SetProveedor(AValue: IBizProveedor);
var
bEnEdicion : Boolean;
begin
FProveedor := AValue;
if Assigned(FProveedor) then
begin
if not FProveedor.DataTable.Active then
FProveedor.DataTable.Active := True;
if ID_PROVEEDOR <> FProveedor.ID then
begin
bEnEdicion := (DataTable.State in dsEditModes);
if not bEnEdicion then
DataTable.Edit;
ID_PROVEEDOR := FProveedor.ID;
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;
function TBizPedidoProveedor._GetProveedor: IBizProveedor;
begin
Result := FProveedor;
end;
procedure TBizPedidoProveedor._SetProveedor(AValue: IBizProveedor);
begin
FProveedor := AValue;
end;
procedure TBizPedidoProveedor.SetDetalles(Value: IBizDetallesPedidoProveedor);
begin
FDetalles := Value;
EnlazarMaestroDetalle(FDetallesLink, FDetalles);
end;
procedure TBizPedidoProveedor.SetFECHA_CONFIRMACIONValue(const aValue: TDateTime);
begin
if EsFechaVacia(aValue) then
SetFieldNull(DataTable, fld_PedidosProveedorFECHA_CONFIRMACION)
else
inherited;
end;
procedure TBizPedidoProveedor.SetFECHA_ENTREGAValue(const aValue: TDateTime);
begin
if EsFechaVacia(aValue) then
SetFieldNull(DataTable, fld_PedidosProveedorFECHA_ENTREGA)
else
inherited;
end;
procedure TBizPedidoProveedor.SetFECHA_ENVIOValue(const aValue: TDateTime);
begin
if EsFechaVacia(aValue) then
SetFieldNull(DataTable, fld_PedidosProveedorFECHA_ENVIO)
else
inherited;
end;
procedure TBizPedidoProveedor.SetFECHA_PEDIDOValue(const aValue: TDateTime);
begin
if EsFechaVacia(aValue) then
SetFieldNull(DataTable, fld_PedidosProveedorFECHA_PEDIDO)
else
inherited;
end;
procedure TBizPedidoProveedor.SetID_FORMA_PAGOValue(const aValue: Integer);
begin
if (aValue = 0) then
SetFieldNull(DataTable, fld_PedidosProveedorID_FORMA_PAGO)
else
inherited;
end;
procedure TBizPedidoProveedor.SetID_PEDIDO_CLIENTEValue(const aValue: Integer);
begin
if (aValue = 0) then
SetFieldNull(DataTable, fld_PedidosProveedorID_PEDIDO_CLIENTE)
else
inherited;
end;
{procedure TBizPedidoProveedor.SetINCIDENCIASValue(const aValue: IROStrings);
begin
if not Assigned(aValue) then
SetFieldNull(DataTable, fld_PedidosProveedorINCIDENCIAS)
else
inherited;
end;}
initialization
RegisterDataTableRules(BIZ_CLIENT_PEDIDO_PROVEEDOR, TBizPedidoProveedor);
finalization
end.