This repository has been archived on 2024-12-02. You can view files and clone it, but cannot push or open issues or pull requests.
AlonsoYSal_FactuGES/Modulos/Facturas de proveedor/Reglas/uBizFacturasProveedor.pas
2007-06-21 16:02:50 +00:00

250 lines
7.5 KiB
ObjectPascal
Raw Blame History

unit uBizFacturasProveedor;
interface
uses
uDAInterfaces, uDADataTable, Classes, uBizContacto, DB,
uBizImportesDetalleBase,
uBizImportesCabeceraBase, uDBSelectionList,
uExceptions, uBizInformesBase, schFacturasProveedorClient_Intf;
const
BIZ_FACTURASPROVEEDOR = 'Client.FacturasProveedor';
SITUACION_PENDIENTE = 'Pendiente';
SITUACION_PAGADO = 'Pagado';
type
IBizFacturasProveedor = interface(IFacturasProveedor)
['{1D9E1949-8CC3-4776-BA2C-7E1F4A73A432}']
function GetProveedor: IBizProveedor;
procedure SetProveedor(Value: IBizProveedor);
property Proveedor: IBizProveedor read GetProveedor write SetProveedor;
procedure Show;
procedure CopyFrom(AFacturaProveedor : IBizFacturasProveedor);
end;
TBizFacturasProveedor = class(TFacturasProveedorDataTableRules, IBizFacturasProveedor,
IBizImportesCabecera, ISelectedRowList,
IApplyUpdateFailedException)
private
FProveedor : IBizProveedor;
FSelectedRows : TSelectedRowList;
protected
procedure ShowApplyUpdateFailed (const Error: EDAApplyUpdateFailed);
function GetProveedor: IBizProveedor;
procedure SetProveedor(Value: IBizProveedor);
procedure OnNewRecord(Sender: TDADataTable); override;
function GetSelectedRows : TSelectedRowList;
procedure BeforeDelete(Sender: TDADataTable); override;
procedure OnPostError(DataTable: TDADataTable; Error: EDatabaseError;
var Action: TDataAction); override;
procedure BeforeApplyUpdates(Sender : TDADataTable; const Delta : IDADelta);
public
procedure RecalcularImporte;
property Proveedor: IBizProveedor read GetProveedor write SetProveedor;
procedure Show;
procedure CopyFrom(AFacturaProveedor : IBizFacturasProveedor); overload;
constructor Create(aDataTable: TDADataTable); override;
destructor Destroy; override;
property SelectedRows : TSelectedRowList read GetSelectedRows;
end;
procedure ValidarFacturaProveedor (const AFacturaProveedor : IBizFacturasProveedor);
implementation
uses
Windows, Dialogs, uDACDSDataTable, SysUtils, uEditorUtils, Variants, Math,
uDataModuleContactos, Controls, Forms,
uDataModuleBase, uDataModuleUsuarios,
uDataTableUtils, uDataModuleFacturasProveedor;
var
FCancelInsert : Boolean;
procedure ValidarFacturaProveedor (const AFacturaProveedor : IBizFacturasProveedor);
begin
if (FloatToStr(AFacturaProveedor.FECHAFACTURA) = '0') then
raise Exception.Create('Debe indicar la fecha de esta factura');
if not Assigned(AFacturaProveedor.Proveedor) or
(AFacturaProveedor.Proveedor.DataTable.IsEmpty) then
raise Exception.Create('Debe indicar el proveedor de esta factura');
end;
constructor TBizFacturasProveedor.Create(aDataTable: TDADataTable);
begin
inherited;
FProveedor := NIL;
FSelectedRows := TSelectedRowList.Create(aDataTable);
aDataTable.OnBeforeApplyUpdates := BeforeApplyUpdates;
end;
destructor TBizFacturasProveedor.Destroy;
begin
FProveedor := NIL;
FSelectedRows.Free;
inherited;
end;
function TBizFacturasProveedor.GetProveedor: IBizProveedor;
begin
if not Assigned(FProveedor) or
(CODIGOPROVEEDOR <> FProveedor.Codigo) and
not (FProveedor.DataTable.State in dsEditModes) then
begin
FProveedor := dmContactos.GetProveedor(CODIGOPROVEEDOR);
if not FProveedor.DataTable.Active then
FProveedor.DataTable.Active := True;
if not FProveedor.DataTable.IsEmpty then // Est<73> vac<61>o si la factura es nueva y no tiene proveedor
begin
FProveedor.Edit;
FProveedor.NOMBRE := NOMBRE;
FProveedor.NIFCIF := NIFCIF;
FProveedor.CALLE := CALLE;
FProveedor.CODIGOPOSTAL := CODIGOPOSTAL;
FProveedor.PROVINCIA := PROVINCIA;
FProveedor.POBLACION := POBLACION;
FProveedor.Post;
end;
end;
Result := FProveedor;
end;
procedure TBizFacturasProveedor.CopyFrom(AFacturaProveedor : IBizFacturasProveedor);
var
ACursor: TCursor;
begin
{ if not (State in dsEditModes) then
Edit;
ACursor := Screen.Cursor;
Screen.Cursor := crHourGlass;
Application.ProcessMessages;
try
CODIGOEMPRESA := APresupuesto.CODIGOEMPRESA;
CODIGOCONTACTO := APresupuesto.CODIGOCONTACTO;
BASEIMPONIBLE := APresupuesto.BASEIMPONIBLE;
DESCUENTO := APresupuesto.DESCUENTO;
IVA := APresupuesto.IVA;
OBSERVACIONES := APresupuesto.OBSERVACIONES;
FORMAPAGO := APresupuesto.FORMAPAGO;
CODIGOPRESUPUESTO := APresupuesto.CODIGO;
Proveedor := APresupuesto.Proveedor;
Detalles.CopyFrom(APresupuesto.Detalles);
RecalcularImporte;
MessageBox(0, 'Se ha copiado correctamente el presupuesto elegido en este albar<61>n.', 'Presupuesto copiado', MB_ICONWARNING or MB_OK);
finally
Screen.Cursor := ACursor;
end;}
end;
procedure TBizFacturasProveedor.OnNewRecord(Sender: TDADataTable);
begin
inherited;
CODIGOEMPRESA := dmBase.CodigoEmpresa;
USUARIO := dmUsuarios.LoginInfo.UserID;
FECHAALTA := Date;
FECHAFACTURA := Date;
CODIGO := dmFacturasProveedor.GetNextAutoinc;
end;
procedure TBizFacturasProveedor.SetProveedor(Value: IBizProveedor);
var
bEnEdicion : Boolean;
begin
bEnEdicion := (DataTable.State in dsEditModes);
if not bEnEdicion then
Edit;
FProveedor := Value;
if Assigned(FProveedor) then
begin
CODIGOPROVEEDOR := FProveedor.CODIGO;
NOMBRE := FProveedor.NOMBRE;
NIFCIF := FProveedor.NIFCIF;
CALLE := FProveedor.CALLE;
CODIGOPOSTAL := FProveedor.CODIGOPOSTAL;
PROVINCIA := FProveedor.PROVINCIA;
POBLACION := FProveedor.POBLACION;
if not bEnEdicion then
Post;
end
end;
procedure TBizFacturasProveedor.Show;
begin
ShowEditor(IBizFacturasProveedor, Self, etItem);
end;
function TBizFacturasProveedor.GetSelectedRows: TSelectedRowList;
begin
Result := FSelectedRows;
end;
procedure TBizFacturasProveedor.ShowApplyUpdateFailed(
const Error: EDAApplyUpdateFailed);
begin
if (Pos(AUF_FKVIOLATION, Error.Message) > 0) then
MessageBox(0, 'No se puede borrar este albar<61>n porque tiene una factura asociada', 'Atenci<63>n', MB_ICONWARNING or MB_OK);
end;
procedure TBizFacturasProveedor.BeforeDelete(Sender: TDADataTable);
begin
inherited;
if not dmFacturasProveedor.PuedoEliminarFactura(CODIGO) then
raise Exception.Create('No se puede borrar esta factura porque...');
end;
procedure TBizFacturasProveedor.OnPostError(DataTable: TDADataTable;
Error: EDatabaseError; var Action: TDataAction);
begin
inherited;
Action := daAbort;
if (Pos(AUF_HAVEVALUE, Error.Message) > 0) then
begin
if (Pos('contacto', Error.Message) > 0) then
MessageBox(0, 'Debe indicar el proveedor de esta factura', 'Atenci<63>n', MB_ICONWARNING or MB_OK)
else
if (Pos('Fecha albar<61>n', Error.Message) > 0) then
MessageBox(0, 'Debe indicar la fecha de esta factura', 'Atenci<63>n', MB_ICONWARNING or MB_OK)
else
raise Error;
end
else
raise Error;
end;
procedure TBizFacturasProveedor.BeforeApplyUpdates(Sender: TDADataTable;
const Delta: IDADelta);
var
i : integer;
begin
for i := 0 to Delta.Count - 1 do
case Delta.Changes[i].ChangeType of
ctInsert, ctUpdate : ValidarFacturaProveedor(Self);
//ctDelete :
end;
end;
procedure TBizFacturasProveedor.RecalcularImporte;
begin
RecalcularImportesCabecera(Self.DataTable);
end;
initialization
RegisterDataTableRules(BIZ_FACTURASPROVEEDOR, TBizFacturasProveedor);
finalization
end.