Tecsitel_FactuGES2/Source/Modulos/Obras/Views/uViewObra.pas

270 lines
7.9 KiB
ObjectPascal
Raw Blame History

unit uViewObra;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, uViewBase, ExtCtrls, StdCtrls, Buttons, DB, uDADataTable,
DBCtrls, Grids, DBGrids, uBizObras, Mask, ComCtrls, uCustomView,
JvComponent, JvFormAutoSize, cxControls, cxContainer, cxEdit, cxTextEdit,
cxDBEdit, dxLayoutControl, uDAInterfaces, uViewDatosYSeleccionCliente, cxMemo,
uViewDatosYSeleccionProveedor, uViewSubcontrataObra, uViewClienteAsociadoObra,
cxGraphics, cxMaskEdit, cxDropDownEdit,
uObrasController;
type
IViewObra = interface(IViewBase)
['{D8669267-CAC9-468E-9923-2D3B2DD30CED}']
function GetObra: IBizObra;
procedure SetObra(const Value: IBizObra);
property Obra: IBizObra read GetObra write SetObra;
function GetController : IObrasController;
procedure SetController (const Value : IObrasController);
property Controller: IObrasController read GetController write SetController;
end;
TfrViewObra = class(TfrViewBase, IViewObra)
DADataSource: TDADataSource;
ePersonaContacto: TcxDBTextEdit;
eTlfTelefono: TcxDBTextEdit;
eTlfMovil: TcxDBTextEdit;
eFax: TcxDBTextEdit;
dxLayoutControlObraGroup_Root: TdxLayoutGroup;
dxLayoutControlObra: TdxLayoutControl;
dxLayoutControlObraGroup1: TdxLayoutGroup;
dxLayoutControlObraItem3: TdxLayoutItem;
eNombre: TcxDBTextEdit;
dxLayoutControlObraItem4: TdxLayoutItem;
dxLayoutControlObraItem1: TdxLayoutItem;
dxLayoutControlObraItem5: TdxLayoutItem;
dxLayoutControlObraItem6: TdxLayoutItem;
dxLayoutControlObraGroup3: TdxLayoutGroup;
dxLayoutControlObraItem10: TdxLayoutItem;
eCalle: TcxDBTextEdit;
dxLayoutControlObraItem2: TdxLayoutItem;
cbPoblacion: TcxDBComboBox;
dxLayoutControlObraItem7: TdxLayoutItem;
dxLayoutControlObraGroup5: TdxLayoutGroup;
eCodigoPostal: TcxDBTextEdit;
dxLayoutControlObraItem9: TdxLayoutItem;
cbProvincia: TcxDBComboBox;
dxLayoutControlObraGroup7: TdxLayoutGroup;
dxLayoutControlObraGroup4: TdxLayoutGroup;
dxLayoutControlObraItem11: TdxLayoutItem;
eObservaciones: TcxDBMemo;
dxLayoutControlObraGroup2: TdxLayoutGroup;
dxLayoutControlObraGroup8: TdxLayoutGroup;
frViewClienteAsociadoObra1: TfrViewClienteAsociadoObra;
dxLayoutControlObraItem12: TdxLayoutItem;
dxLayoutControlObraItem13: TdxLayoutItem;
dxLayoutControlObraGroup11: TdxLayoutGroup;
procedure cbPoblacionPropertiesInitPopup(Sender: TObject);
procedure cbProvinciaPropertiesInitPopup(Sender: TObject);
protected
FObra: IBizObra;
FController : IObrasController;
FProvincias : TStringList;
FIDProvincia : Integer; //Almacenar<61> la provincia que hay seleccionada para no cargar las poblaciones si no es necesario
FPoblaciones : TStringList;
procedure CargarProvincias;
procedure CargarPoblaciones;
function GetObra: IBizObra;
procedure SetObra(const Value: IBizObra);
procedure OnClienteChanged(Sender : TObject);
function GetController : IObrasController;
procedure SetController (const Value : IObrasController); virtual;
public
constructor Create(AOwner : TComponent); override;
destructor Destroy; override;
property Obra: IBizObra read GetObra write SetObra;
property Controller: IObrasController read GetController write SetController;
end;
implementation
uses
uDataModuleObras, uProvinciasPoblacionesController, uStringsUtils,
uClientesController, uBizDireccionesContacto, uDialogUtils;
{$R *.dfm}
{ TfrViewObras }
{
******************************* TfrViewObras ********************************
}
procedure TfrViewObra.CargarPoblaciones;
var
i : integer;
begin
if (FIDProvincia <> StrToInt(FProvincias.Values[cbProvincia.Text])) then
Begin
FIDProvincia := StrToInt(FProvincias.Values[cbProvincia.Text]);
with TProvinciasPoblacionesController.Create do
try
FPoblaciones := DarListaPoblaciones(FIDProvincia);
with cbPoblacion.Properties.Items do
begin
BeginUpdate;
try
Clear;
for i := 0 to FPoblaciones.Count - 1 do
Add(FPoblaciones.Names[i]);
finally
EndUpdate;
end;
end;
finally
Free;
end;
End;
end;
procedure TfrViewObra.CargarProvincias;
var
i : integer;
begin
with TProvinciasPoblacionesController.Create do
try
FProvincias := DarListaProvincias;
with cbProvincia.Properties.Items do
begin
BeginUpdate;
try
Clear;
for i := 0 to FProvincias.Count - 1 do
Add(FProvincias.Names[i]);
finally
EndUpdate;
end;
end;
finally
Free;
end;
end;
procedure TfrViewObra.cbPoblacionPropertiesInitPopup(Sender: TObject);
begin
ShowHourglassCursor;
try
FreeANDNIL(FPoblaciones);
if not Assigned(FProvincias) then
CargarProvincias;
if not EsCadenaVacia(cbProvincia.Text) and (FProvincias.IndexOfName(cbProvincia.Text) <> -1) then
CargarPoblaciones
finally
HideHourglassCursor;
end;
end;
procedure TfrViewObra.cbProvinciaPropertiesInitPopup(Sender: TObject);
begin
ShowHourglassCursor;
try
if not Assigned(FProvincias) then
CargarProvincias;
finally
HideHourglassCursor;
end;
end;
constructor TfrViewObra.Create(AOwner: TComponent);
begin
inherited;
FIDProvincia := 0;
FProvincias := NIL;
FPoblaciones := NIL;
end;
destructor TfrViewObra.Destroy;
begin
if Assigned(FProvincias) then
FreeANDNIL(FProvincias);
if Assigned(FPoblaciones) then
FreeANDNIL(FPoblaciones);
FObra := Nil;
FController := Nil;
inherited;
end;
function TfrViewObra.GetController: IObrasController;
begin
Result := FController;
end;
function TfrViewObra.GetObra: IBizObra;
begin
Result := FObra;
end;
procedure TfrViewObra.OnClienteChanged(Sender: TObject);
var
AClientesController : IClientesController;
ADireccion : IBizDireccionesContacto;
begin
if Assigned(FObra) then
begin
FObra.Edit;
FObra.ID_CLIENTE := frViewClienteAsociadoObra1.ID_Cliente;
AClientesController := TClientesController.Create;
try
{ // Esto podr<64>a ser configurable en el programa
if not AClientesController.TieneDatosBancarios(FPresupuesto.Cliente) then
MessageBox(0, 'Este cliente no tiene datos bancarios en su ficha', 'Atenci<63>n', MB_ICONWARNING or MB_OK);}
case frViewClienteAsociadoObra1.Cliente.Direcciones.RecordCount of
0 : begin
FController.CopiarDireccion(frViewClienteAsociadoObra1.Cliente, FObra);
ShowInfoMessage('Direcci<63>n de la obra actualizada.', 'Se ha actualizado los datos de la direcci<63>n de la obra con los datos del cliente.');
end;
else begin
ADireccion := AClientesController.ElegirDireccionEntrega(frViewClienteAsociadoObra1.Cliente, '');
ShowHourglassCursor;
try
if Assigned(ADireccion) then
FController.CopiarDireccion(ADireccion, FObra);
finally
HideHourglassCursor;
ADireccion := NIL;
end;
end;
end;
finally
AClientesController := NIL;
end;
end;
end;
procedure TfrViewObra.SetController(const Value: IObrasController);
begin
FController := Value;
end;
procedure TfrViewObra.SetObra(const Value: IBizObra);
begin
FObra := Value;
frViewClienteAsociadoObra1.OnClienteChanged := NIL;
if Assigned(FObra) then
begin
DADataSource.DataTable := FObra.DataTable;
if not FObra.ID_CLIENTEIsNull then
frViewClienteAsociadoObra1.ID_Cliente := FObra.ID_CLIENTE;
frViewClienteAsociadoObra1.OnClienteChanged := OnClienteChanged;
end
else
DADataSource.DataTable := NIL;
end;
end.