AbetoDesign_FactuGES2/Source/Modulos/Facturas de proveedor/Views/uViewFacturaProveedor.pas

308 lines
11 KiB
ObjectPascal
Raw Blame History

unit uViewFacturaProveedor;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, uViewBase, DB, uDADataTable, uCustomView,
uViewDatosYSeleccionCliente, uBizFacturasProveedor,
cxControls, cxContainer, cxEdit, cxTextEdit, cxDBEdit, dxLayoutControl,
cxMemo, cxMaskEdit, cxDropDownEdit, cxCalendar, cxSpinEdit, StdCtrls, Mask,
DBCtrls, cxGraphics, dxLayoutLookAndFeels, cxLookupEdit, cxDBLookupEdit,
cxDBLookupComboBox, uFormasPagoController, uViewDatosYSeleccionProveedor,
uDAInterfaces, uBizFormasPago, uViewTienda, uFacturasProveedorController,
ActnList, uViewProveedorFactura, uViewObservaciones;
type
IViewFacturaProveedor = interface(IViewBase)
['{DD934441-75CC-452F-8861-684961E90BB6}']
function GetController : IFacturasProveedorController;
procedure SetController (const Value : IFacturasProveedorController);
property Controller : IFacturasProveedorController read GetController write SetController;
function GetFactura: IBizFacturaProveedor;
procedure SetFactura(const Value: IBizFacturaProveedor);
property Factura: IBizFacturaProveedor read GetFactura write SetFactura;
end;
TfrViewFacturaProveedor = class(TfrViewBase, IViewFacturaProveedor)
DADataSource: TDADataSource;
dxLayoutControl1Group_Root: TdxLayoutGroup;
dxLayoutControl1: TdxLayoutControl;
dxLayoutControl1Item1: TdxLayoutItem;
eReferencia: TcxDBTextEdit;
dxLayoutControl1Item2: TdxLayoutItem;
edtFecha: TcxDBDateEdit;
dxLayoutControl1Group1: TdxLayoutGroup;
dxLayoutControl1Group2: TdxLayoutGroup;
dxLayoutControl1Group5: TdxLayoutGroup;
dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList;
dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel;
dsFormaPago: TDADataSource;
dxLayoutControl1Item4: TdxLayoutItem;
cbFormaPago: TcxDBLookupComboBox;
dxLayoutControl1Item10: TdxLayoutItem;
bFormasPago: TButton;
dxLayoutControl1Group6: TdxLayoutGroup;
dxLayoutControl1Item6: TdxLayoutItem;
eReferenciaProveedor: TcxDBTextEdit;
dxLayoutControl1Group4: TdxLayoutGroup;
dxLayoutControl1Item7: TdxLayoutItem;
frViewTienda1: TfrViewTienda;
dxLayoutControl1Group7: TdxLayoutGroup;
ledtFechaVencimiento: TdxLayoutItem;
edtFechaVencimiento: TcxDBDateEdit;
ActionList1: TActionList;
actElegirDireccion: TAction;
dxLayoutControl1Item3: TdxLayoutItem;
frViewProveedorFactura1: TfrViewProveedorFactura;
dxLayoutControl1Group8: TdxLayoutGroup;
dxLayoutControl1Group3: TdxLayoutGroup;
frViewObservaciones1: TfrViewObservaciones;
dxLayoutControl1Item5: TdxLayoutItem;
dxLayoutControl1Item8: TdxLayoutItem;
cbTipoFactura: TcxDBLookupComboBox;
dsTiposFactura: TDADataSource;
ledtSituacion: TdxLayoutItem;
edtSituacion: TcxDBComboBox;
procedure bFormasPagoClick(Sender: TObject);
procedure CustomViewDestroy(Sender: TObject);
procedure CustomViewCreate(Sender: TObject);
procedure frViewProveedorFacturaButton1Click(Sender: TObject);
procedure frViewProveedorFacturaButton2Click(Sender: TObject);
procedure actElegirDireccionExecute(Sender: TObject);
procedure actElegirDireccionUpdate(Sender: TObject);
procedure cbFormaPagoPropertiesEditValueChanged(Sender: TObject);
procedure edtFechaVencimientoPropertiesEditValueChanged(Sender: TObject);
protected
FFactura : IBizFacturaProveedor;
FFormasPago : IBizFormaPago;
FTiposFacturaProveedor : IBizTiposFacturaProveedor;
FFormasPagoController : IFormasPagoController;
FController : IFacturasProveedorController;
function GetFactura: IBizFacturaProveedor;
procedure SetFactura(const Value: IBizFacturaProveedor);
function GetController : IFacturasProveedorController;
procedure SetController (const Value : IFacturasProveedorController);
public
property Factura: IBizFacturaProveedor read GetFactura write SetFactura;
property Controller : IFacturasProveedorController read GetController write SetController;
end;
implementation
uses
DateUtils, uDataModuleContactos, schFacturasProveedorClient_Intf, uBizDireccionesContacto,
uProveedoresController;
{$R *.dfm}
{ TfrViewFacturaProveedor }
procedure TfrViewFacturaProveedor.actElegirDireccionExecute(Sender: TObject);
var
AProveedoresController : IProveedoresController;
ADireccion : IBizDireccionesContacto;
begin
inherited;
AProveedoresController := TProveedoresController.Create;
try
ADireccion := AProveedoresController.ElegirDireccion(FFactura.Proveedor,
'Seleccione la direcci<63>n del Proveedor que quiere utilizar como direcci<63>n de envio de este Albaran.');
if Assigned(ADireccion) then
Controller.CopiarDireccion(ADireccion, FFactura);
finally
AProveedoresController := NIL;
end;
end;
procedure TfrViewFacturaProveedor.actElegirDireccionUpdate(Sender: TObject);
begin
inherited;
if (Sender as TAction).Enabled then
(Sender as TAction).Enabled := (not ReadOnly) and
Assigned(FFactura) and
FFactura.DataTable.Active and
Assigned(FFactura.Proveedor) and
Assigned(FFactura.Proveedor) and
Assigned(FFactura.Proveedor.Direcciones) and
FFactura.Proveedor.Direcciones.DataTable.Active and
(FFactura.Proveedor.Direcciones.DataTable.RecordCount > 0);
end;
procedure TfrViewFacturaProveedor.bFormasPagoClick(Sender: TObject);
begin
inherited;
if Assigned(FFormasPago) then
FFormasPagoController.VerTodos(FFormasPago);
end;
procedure TfrViewFacturaProveedor.cbFormaPagoPropertiesEditValueChanged(Sender: TObject);
begin
if Assigned(Factura) and (Factura.DataTable.State in dsEditModes) then
begin
if Assigned(FFormasPago) then
if (FFormasPago.Plazos.RecordCount = 0) then
begin
// edtFechaVencimiento.EditValue := DateOf(Now);
ledtFechaVencimiento.Enabled := True;
edtSituacion.EditValue := CTE_PENDIENTE;
ledtSituacion.Enabled := True;
end
else
begin
Application.MessageBox('Ha elegido una forma de pago con plazos asignados, la situaci<63>n de la factura vendr<64> dada por la situaci<63>n de los recibos generados seg<65>n los plazos', 'Atenci<63>n', MB_OK);
edtFechaVencimiento.EditValue := Null;
ledtFechaVencimiento.Enabled := False;
edtSituacion.EditValue := CTE_PENDIENTE;
ledtSituacion.Enabled := False;
end;
end;
end;
procedure TfrViewFacturaProveedor.CustomViewCreate(Sender: TObject);
begin
inherited;
FFormasPago := Nil;
FTiposFacturaProveedor := Nil;
FFormasPagoController := TFormasPagoController.Create;
frViewProveedorFactura1.MsgElegirProveedor := 'Elija el proveedor al que se le realizar<61> la factura.';
cbFormaPago.Properties.OnEditValueChanged := cbFormaPagoPropertiesEditValueChanged;
end;
procedure TfrViewFacturaProveedor.CustomViewDestroy(Sender: TObject);
begin
cbFormaPago.Properties.OnEditValueChanged := Nil;
FFormasPago := Nil;
FTiposFacturaProveedor := Nil;
FFormasPagoController := NIL;
inherited;
end;
procedure TfrViewFacturaProveedor.edtFechaVencimientoPropertiesEditValueChanged(
Sender: TObject);
begin
inherited;
if Assigned(Factura) and (Factura.DataTable.State in dsEditModes) then
begin
if (edtFechaVencimiento.EditValue <> null) then
begin
if (edtFechaVencimiento.EditValue = 0) then
begin
Factura.DataTable.DisableEventHandlers;
try
Factura.DataTable.FieldByName(fld_FacturasProveedorFECHA_VENCIMIENTO).Clear;
finally
Factura.DataTable.EnableEventHandlers;
end;
end
else begin
Application.MessageBox('Ha elegido una fecha de vencimiento, la situaci<63>n de la factura vendr<64> dada por la situaci<63>n del recibo generado con el vencimiento dado', 'Atenci<63>n', MB_OK);
edtSituacion.EditValue := CTE_PENDIENTE;
ledtSituacion.Enabled := False;
end;
end
else begin
// edtSituacion.EditValue := CTE_PENDIENTE;
ledtSituacion.Enabled := True;
end;
end;
end;
procedure TfrViewFacturaProveedor.frViewProveedorFacturaButton1Click(Sender: TObject);
begin
if Assigned(Factura) and Assigned(Factura.Proveedor) and
Assigned (Factura.Detalles) and (Factura.Detalles.RecordCount > 0) then
begin
if (Application.MessageBox('Si cambia de proveedor, se eliminar<61>n todos sus art<72>culos de la factura actual, <20>Desea continuar?', 'Atenci<63>n', MB_YESNO) = IDNO) then
Exit;
end;
frViewProveedorFactura.actElegirContacto.Execute;
end;
procedure TfrViewFacturaProveedor.frViewProveedorFacturaButton2Click(
Sender: TObject);
begin
if Assigned(Factura) and Assigned(Factura.Proveedor) and
Assigned (Factura.Detalles) and (Factura.Detalles.RecordCount > 0) then
begin
if (Application.MessageBox('Si cambia de proveedor, se eliminar<61>n todos sus art<72>culos de la factura actual, <20>Desea continuar?', 'Atenci<63>n', MB_YESNO) = IDNO) then
Exit;
end;
frViewProveedorFactura1.actAnadirContacto.Execute;
end;
function TfrViewFacturaProveedor.GetController: IFacturasProveedorController;
begin
Result := FController;
end;
function TfrViewFacturaProveedor.GetFactura: IBizFacturaProveedor;
begin
Result := FFactura;
end;
procedure TfrViewFacturaProveedor.SetController(const Value: IFacturasProveedorController);
begin
FController := Value;
if Assigned(FController) then
frViewProveedorFactura1.Controller := Controller.ProveedorController;
end;
procedure TfrViewFacturaProveedor.SetFactura(const Value: IBizFacturaProveedor);
begin
FFactura := Value;
if Assigned(FFactura) then
begin
DADataSource.DataTable := FFactura.DataTable;
frViewTienda1.DataItem := FFactura.DataTable;
FFormasPago := FFormasPagoController.BuscarTodos;
dsFormaPago.DataTable := FFormasPago.DataTable;
dsFormaPago.DataTable.Active := True;
//Posicionamos la tabla en la forma de pago que tiene la factura ya que no lo hace el componente por si solo
FFormasPago.DataTable.Locate(fld_FacturasProveedorID, FFactura.ID_FORMA_PAGO, []);
if ((not FFactura.FECHA_VENCIMIENTOIsNull) or (FFormasPago.Plazos.RecordCount > 0)) then
begin
if (edtFechaVencimiento.EditingValue <> null) then
ledtSituacion.Enabled := False;
if (FFormasPago.Plazos.RecordCount > 0) then
ledtFechaVencimiento.Enabled := False
else
ledtFechaVencimiento.Enabled := true;
end
else
begin
ledtFechaVencimiento.Enabled := True;
ledtSituacion.Enabled := True;
end;
FTiposFacturaProveedor := FController.darTiposFacturaProveedor;
dsTiposFactura.DataTable := FTiposFacturaProveedor.DataTable;
dsTiposFactura.DataTable.Active := True;
//Solo se deshabilita al insertar, luego la referencia ser<65> modificable
//eReferencia.Enabled := (FFactura.DataTable.State = dsInsert);
if FFactura.TIPO = CTE_TIPO_ABONO then
begin
dxLayoutControl1Item2.Caption := 'Fecha del abono:';
dxLayoutControl1Group1.Caption := 'Datos del abono';
end;
end
else begin
DADataSource.DataTable := NIL;
dsFormaPago.DataTable := NIL;
frViewProveedorFactura1.Proveedor := NIL
end;
end;
end.