Tareas #798: En el informe de listado de iva facturas proveedor ver el irpf Tareas #799: En las facturas de proveedor si se pone fecha de vencimiento que se genere un recibo con dicha fecha git-svn-id: https://192.168.0.254/svn/Proyectos.AbetoDesign_FactuGES/trunk@41 93f398dd-4eb6-7a46-baf6-13f46f578da2
414 lines
12 KiB
ObjectPascal
414 lines
12 KiB
ObjectPascal
unit uBizFacturasProveedor;
|
||
|
||
interface
|
||
|
||
uses
|
||
uDAInterfaces, uDADataTable, schFacturasProveedorClient_Intf,
|
||
uBizContactos, uBizDetallesFacturaProveedor, uDBSelectionListUtils, Classes;
|
||
|
||
const
|
||
BIZ_CLIENT_FACTURA_PROVEEDOR = 'Client.FacturaProveedor';
|
||
BIZ_CLIENT_TIPOS_FACTURA_PROVEEDOR = 'Client.TiposFacturaProveedor';
|
||
|
||
CTE_TIPO_ABONO = 'A';
|
||
CTE_TIPO_FACTURA = 'F';
|
||
|
||
CTE_PENDIENTE = 'PENDIENTE';
|
||
CTE_PARCIAMENTE_PAGADA = 'PARCIALMENTE PAGADA';
|
||
CTE_PAGADA = 'PAGADA';
|
||
|
||
type
|
||
IBizTiposFacturaProveedor = interface(ITiposFacturaProveedor)
|
||
['{920DACA7-E6D7-4F0B-BEE0-D2AAC2F614A5}']
|
||
end;
|
||
|
||
IBizFacturaProveedor = interface(IFacturasProveedor)
|
||
['{4BC473E5-3B82-4C1A-8E52-2A227490F94E}']
|
||
|
||
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: IBizDetallesFacturaProveedor;
|
||
procedure SetDetalles(Value: IBizDetallesFacturaProveedor);
|
||
property Detalles: IBizDetallesFacturaProveedor read GetDetalles write SetDetalles;
|
||
|
||
function GetContratos: IBizContratosFacturaProveedor;
|
||
procedure SetContratos(Value: IBizContratosFacturaProveedor);
|
||
property Contratos: IBizContratosFacturaProveedor read GetContratos write SetContratos;
|
||
|
||
function EsNuevo : Boolean;
|
||
procedure CalcularImporteTotal;
|
||
end;
|
||
|
||
TBizTiposFacturaProveedor = class(TTiposFacturaProveedorDataTableRules, IBizTiposFacturaProveedor)
|
||
end;
|
||
|
||
TBizFacturaProveedor = class(TFacturasProveedorDataTableRules, IBizFacturaProveedor, ISeleccionable)
|
||
private
|
||
FSeleccionableInterface : ISeleccionable;
|
||
procedure CalcularDescuento;
|
||
procedure CalcularIVA;
|
||
procedure CalcularIRPF;
|
||
procedure CalcularRE;
|
||
procedure CalcularBaseImponible;
|
||
procedure AsignarTipoIVA (IDTipoIVA : Integer);
|
||
protected
|
||
FProveedor : IBizProveedor;
|
||
FDetalles : IBizDetallesFacturaProveedor;
|
||
FDetallesLink : TDADataSource;
|
||
FContratos : IBizContratosFacturaProveedor;
|
||
FContratosLink : TDADataSource;
|
||
|
||
procedure SetProveedor(AValue : IBizProveedor);
|
||
function GetProveedor : IBizProveedor;
|
||
|
||
procedure _SetProveedor(AValue : IBizProveedor);
|
||
function _GetProveedor : IBizProveedor;
|
||
|
||
function GetDetalles: IBizDetallesFacturaProveedor;
|
||
procedure SetDetalles(Value: IBizDetallesFacturaProveedor);
|
||
|
||
function GetContratos: IBizContratosFacturaProveedor;
|
||
procedure SetContratos(Value: IBizContratosFacturaProveedor);
|
||
|
||
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 IRPFOnChange(Sender: TDACustomField);
|
||
procedure SetID_TIENDAValue(const aValue: Integer);
|
||
procedure SetID_SUBCUENTAValue(const aValue: Integer);
|
||
|
||
procedure OnNewRecord(Sender: TDADataTable); override;
|
||
|
||
public
|
||
function EsNuevo : Boolean;
|
||
procedure IniciarValoresFacturaNueva;
|
||
procedure CalcularImporteTotal;
|
||
|
||
property Proveedor : IBizProveedor read GetProveedor write SetProveedor;
|
||
property _Proveedor : IBizProveedor read _GetProveedor write _SetProveedor;
|
||
property Detalles: IBizDetallesFacturaProveedor read GetDetalles write SetDetalles;
|
||
property Contratos: IBizContratosFacturaProveedor read GetContratos write SetContratos;
|
||
|
||
property SeleccionableInterface : ISeleccionable read FSeleccionableInterface
|
||
write FSeleccionableInterface implements ISeleccionable;
|
||
|
||
constructor Create(aDataTable: TDADataTable); override;
|
||
destructor Destroy; override;
|
||
end;
|
||
|
||
implementation
|
||
{$INCLUDE ..\..\..\FactuGES.inc}
|
||
|
||
uses
|
||
SysUtils, uDataTableUtils, DB, uDateUtils, DateUtils, uDataModuleUsuarios,
|
||
Variants, cxDateUtils, uTiposIVAController, uBizTiposIVA, uFactuGES_App, uBizEmpresasTiendas;
|
||
|
||
{ TBizFacturaProveedor }
|
||
|
||
function TBizFacturaProveedor.EsNuevo: Boolean;
|
||
begin
|
||
Result := (ID < 0);
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor.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 TBizFacturaProveedor.CalcularBaseImponible;
|
||
begin
|
||
if not Self.DataTable.Editing then
|
||
Edit;
|
||
IMPORTE_DESCUENTO := IMPORTE_NETO * (DESCUENTO/100);
|
||
BASE_IMPONIBLE := IMPORTE_NETO - IMPORTE_DESCUENTO; // + IMPORTE_PORTE; ya no se tiene en cuenta porque se desglosa por art<72>culo
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor.CalcularDescuento;
|
||
begin
|
||
if not Self.DataTable.Editing then
|
||
Edit;
|
||
IMPORTE_DESCUENTO := (DESCUENTO / 100) * BASE_IMPONIBLE;
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor.CalcularImporteTotal;
|
||
begin
|
||
DataTable.DisableControls;
|
||
DataTable.Fields.FieldEventsDisabled := True;
|
||
try
|
||
CalcularBaseImponible;
|
||
CalcularIVA;
|
||
CalcularIRPF;
|
||
CalcularRE;
|
||
|
||
if not Self.DataTable.Editing then
|
||
Edit;
|
||
IMPORTE_TOTAL := BASE_IMPONIBLE + IMPORTE_IVA - IMPORTE_IRPF + IMPORTE_RE;
|
||
finally
|
||
DataTable.Fields.FieldEventsDisabled := False;
|
||
DataTable.EnableControls;
|
||
end;
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor.CalcularIRPF;
|
||
begin
|
||
if not Self.DataTable.Editing then
|
||
Edit;
|
||
IMPORTE_IRPF := (IRPF / 100) * BASE_IMPONIBLE;
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor.CalcularIVA;
|
||
begin
|
||
if not Self.DataTable.Editing then
|
||
Edit;
|
||
IMPORTE_IVA := (IVA / 100) * BASE_IMPONIBLE;
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor.CalcularRE;
|
||
begin
|
||
if not Self.DataTable.Editing then
|
||
Edit;
|
||
IMPORTE_RE := (RE / 100) * BASE_IMPONIBLE;
|
||
end;
|
||
|
||
constructor TBizFacturaProveedor.Create(aDataTable: TDADataTable);
|
||
begin
|
||
inherited;
|
||
FProveedor := Nil;
|
||
|
||
with DataTable do
|
||
begin
|
||
FieldByName(fld_FacturasProveedorID_TIPO_IVA).OnChange := ID_TIPO_IVAOnChange;
|
||
FieldByName(fld_FacturasProveedorRECARGO_EQUIVALENCIA).OnChange := RECARGO_EQUIVALENCIAOnChange;
|
||
|
||
FieldByName(fld_FacturasProveedorIMPORTE_NETO).OnChange := IMPORTE_NETOOnChange;
|
||
FieldByName(fld_FacturasProveedorIMPORTE_PORTE).OnChange := IMPORTE_PORTEOnChange;
|
||
FieldByName(fld_FacturasProveedorDESCUENTO).OnChange := DESCUENTOOnChange;
|
||
FieldByName(fld_FacturasProveedorIVA).OnChange := IVAOnChange;
|
||
FieldByName(fld_FacturasProveedorIRPF).OnChange := IRPFOnChange;
|
||
FieldByName(fld_FacturasProveedorRE).OnChange := REOnChange;
|
||
end;
|
||
|
||
FDetallesLink := TDADataSource.Create(NIL);
|
||
FDetallesLink.DataTable := aDataTable;
|
||
|
||
FContratosLink := TDADataSource.Create(NIL);
|
||
FContratosLink.DataTable := aDataTable;
|
||
|
||
FSeleccionableInterface := TSeleccionable.Create(aDataTable);
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor.DESCUENTOOnChange(Sender: TDACustomField);
|
||
begin
|
||
CalcularImporteTotal;
|
||
end;
|
||
|
||
destructor TBizFacturaProveedor.Destroy;
|
||
begin
|
||
FProveedor := NIL;
|
||
FDetalles := NIL;
|
||
FDetallesLink.Free;
|
||
FContratos := NIL;
|
||
FContratosLink.Free;
|
||
|
||
FSeleccionableInterface := NIL;
|
||
inherited;
|
||
end;
|
||
|
||
function TBizFacturaProveedor.GetProveedor: IBizProveedor;
|
||
begin
|
||
Result := FProveedor;
|
||
end;
|
||
|
||
function TBizFacturaProveedor.GetContratos: IBizContratosFacturaProveedor;
|
||
begin
|
||
Result := FContratos;
|
||
end;
|
||
|
||
function TBizFacturaProveedor.GetDetalles: IBizDetallesFacturaProveedor;
|
||
begin
|
||
Result := FDetalles;
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor.ID_TIPO_IVAOnChange(Sender: TDACustomField);
|
||
begin
|
||
AsignarTipoIVA(ID_TIPO_IVA);
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor.IMPORTE_NETOOnChange(Sender: TDACustomField);
|
||
begin
|
||
CalcularImporteTotal;
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor.SetID_SUBCUENTAValue(const aValue: Integer);
|
||
begin
|
||
if aValue < 0 then
|
||
DataTable.Fields[idx_FacturasProveedorID_SUBCUENTA].AsVariant := NULL
|
||
else
|
||
inherited SetID_SUBCUENTAValue(aValue);
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor.SetID_TIENDAValue(const aValue: Integer);
|
||
begin
|
||
if aValue < 0 then
|
||
DataTable.Fields[idx_FacturasProveedorID_TIENDA].AsVariant := NULL
|
||
else
|
||
inherited SetID_TIENDAValue(aValue);
|
||
end;
|
||
|
||
|
||
procedure TBizFacturaProveedor.IMPORTE_PORTEOnChange(Sender: TDACustomField);
|
||
begin
|
||
CalcularImporteTotal;
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor.IniciarValoresFacturaNueva;
|
||
begin
|
||
ID_EMPRESA := AppFactuGES.EmpresaActiva.ID;
|
||
USUARIO := AppFactuGES.UsuarioActivo.UserName;
|
||
FECHA_FACTURA := DateOf(Now);
|
||
FECHA_VENCIMIENTO := DateOf(Now);
|
||
ID_PROVEEDOR := ID_NULO;
|
||
TIPO := CTE_TIPO_FACTURA;
|
||
|
||
ID_FORMA_PAGO := AppFactuGES.EmpresaActiva.ID_FORMA_PAGO;
|
||
ID_TIPO_IVA := AppFactuGES.EmpresaActiva.ID_TIPO_IVA;
|
||
|
||
RE := 0;
|
||
// SITUACION := CTE_PENDIENTE;
|
||
ID_TIENDA := AppFactuGES.TiendaActiva.ID;
|
||
TIENDA := AppFactuGES.TiendaActiva.NOMBRE;
|
||
|
||
{$IFDEF CONTABILIDAD}
|
||
// if Assigned(AppFactuGES.EjercicioActivo) then
|
||
// IGNORAR_CONTABILIDAD := 0
|
||
// else
|
||
IGNORAR_CONTABILIDAD := 1;
|
||
{$ENDIF}
|
||
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor.IRPFOnChange(Sender: TDACustomField);
|
||
begin
|
||
CalcularImporteTotal;
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor.IVAOnChange(Sender: TDACustomField);
|
||
begin
|
||
CalcularImporteTotal;
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor.OnNewRecord(Sender: TDADataTable);
|
||
begin
|
||
inherited;
|
||
IniciarValoresFacturaNueva;
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor.RECARGO_EQUIVALENCIAOnChange(
|
||
Sender: TDACustomField);
|
||
begin
|
||
AsignarTipoIVA(ID_TIPO_IVA);
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor.REOnChange(Sender: TDACustomField);
|
||
begin
|
||
CalcularImporteTotal;
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor.SetProveedor(AValue: IBizProveedor);
|
||
var
|
||
bEnEdicion : Boolean;
|
||
begin
|
||
FProveedor := AValue;
|
||
|
||
bEnEdicion := (DataTable.State in dsEditModes);
|
||
if not bEnEdicion then
|
||
Edit;
|
||
|
||
if Assigned(FProveedor) then
|
||
begin
|
||
if not FProveedor.DataTable.Active then
|
||
FProveedor.DataTable.Active := True;
|
||
|
||
ID_Proveedor := FProveedor.ID;
|
||
NOMBRE := FProveedor.NOMBRE;
|
||
NIF_CIF := FProveedor.NIF_CIF;
|
||
CALLE := FProveedor.CALLE;
|
||
CODIGO_POSTAL := FProveedor.CODIGO_POSTAL;
|
||
PROVINCIA := FProveedor.PROVINCIA;
|
||
POBLACION := FProveedor.POBLACION;
|
||
if FProveedor.ID_FORMA_PAGO > 0 then
|
||
ID_FORMA_PAGO := FProveedor.ID_FORMA_PAGO;
|
||
if FProveedor.ID_TIPO_IVA > 0 then
|
||
ID_TIPO_IVA := FProveedor.ID_TIPO_IVA;
|
||
// RECARGO_EQUIVALENCIA := FProveedor.RECARGO_EQUIVALENCIA;
|
||
Post;
|
||
|
||
if bEnEdicion then
|
||
Edit;
|
||
end
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor.SetContratos(Value: IBizContratosFacturaProveedor);
|
||
begin
|
||
FContratos := Value;
|
||
EnlazarMaestroDetalle(FContratosLink, FContratos);
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor.SetDetalles(Value: IBizDetallesFacturaProveedor);
|
||
begin
|
||
FDetalles := Value;
|
||
EnlazarMaestroDetalle(FDetallesLink, FDetalles);
|
||
end;
|
||
|
||
function TBizFacturaProveedor._GetProveedor: IBizProveedor;
|
||
begin
|
||
Result := FProveedor;
|
||
end;
|
||
|
||
procedure TBizFacturaProveedor._SetProveedor(AValue: IBizProveedor);
|
||
begin
|
||
FProveedor := AValue;
|
||
end;
|
||
|
||
initialization
|
||
RegisterDataTableRules(BIZ_CLIENT_FACTURA_PROVEEDOR, TBizFacturaProveedor);
|
||
RegisterDataTableRules(BIZ_CLIENT_TIPOS_FACTURA_PROVEEDOR, TBizTiposFacturaProveedor);
|
||
|
||
finalization
|
||
|
||
end.
|
||
|