git-svn-id: https://192.168.0.254/svn/Proyectos.AlonsoYSal_FactuGES/trunk@32 9a1d36f3-7752-2d40-8ccb-50eb49674c68
454 lines
14 KiB
ObjectPascal
454 lines
14 KiB
ObjectPascal
unit uBizMontajes;
|
|
|
|
interface
|
|
|
|
uses
|
|
uDAInterfaces, uDADataTable, schMontajesClient_Intf, Classes,
|
|
DBGrids, uDBSelectionList, DB, uExceptions, Controls,
|
|
uBizContacto, uBizPresupuestosCliente, uBizInformesBase;
|
|
|
|
Const
|
|
SITUACION_PENDIENTE = 'Pendiente';
|
|
SITUACION_PENDIENTERECEPCION = 'Pendiente recepción';
|
|
SITUACION_PENDIENTEMONTAJE = 'Pendiente montaje';
|
|
SITUACION_PENDIENTEPAGO = 'Pendiente pago';
|
|
SITUACION_PAGADO = 'Pagado y terminado';
|
|
|
|
Type
|
|
TEnumSituacion = (sitPendientes, sitPendienteRecepcion, sitPendienteMontaje, sitPendientePago, sitPagado);
|
|
|
|
IBizFichaBeneficiosAux = interface(IFichaBeneficios_Aux)
|
|
['{640104F5-36DA-4A00-9355-E731B83BCE99}']
|
|
end;
|
|
|
|
IBizFichaBeneficiosMontaje = interface(IFichaBeneficios)
|
|
['{1A7191CB-6F5C-4E1C-9024-E71C5718EF8B}']
|
|
procedure AnadirFichaBeneficiosDefecto(const pCodigoMontaje: integer; const Tipo: String);
|
|
end;
|
|
|
|
IBizMontaje = interface(IMONTAJES)
|
|
['{03F707D7-E00A-43D7-B14D-7450C0C9771F}']
|
|
procedure Show;
|
|
procedure ShowAll;
|
|
procedure Preview;
|
|
procedure Print;
|
|
|
|
function ShowForSelect : TModalResult;
|
|
|
|
function GetCliente: IBizCliente;
|
|
procedure SetCliente(Value: IBizCliente);
|
|
property Cliente: IBizCliente read GetCliente write SetCliente;
|
|
|
|
function GetPresupuesto: IBizPresupuestos;
|
|
procedure SetPresupuesto(Value: IBizPresupuestos);
|
|
property Presupuesto: IBizPresupuestos read GetPresupuesto write SetPresupuesto;
|
|
|
|
function GetFichaBeneficios: IBizFichaBeneficiosMontaje;
|
|
procedure SetFichaBeneficios(Value: IBizFichaBeneficiosMontaje);
|
|
property FichaBeneficios: IBizFichaBeneficiosMontaje read GetFichaBeneficios write SetFichaBeneficios;
|
|
|
|
function GetTipoFichaBeneficios: String;
|
|
procedure SetTipoFichaBeneficios(Value: String);
|
|
property TipoFichaBeneficios: String read GetTipoFichaBeneficios write SetTipoFichaBeneficios;
|
|
|
|
procedure PreviewLabels;
|
|
procedure PrintLabels;
|
|
function GetLabelCount: Integer;
|
|
procedure SetLabelCount(Value: Integer);
|
|
property LabelCount: Integer read GetLabelCount write SetLabelCount;
|
|
end;
|
|
|
|
TBizMontajeDataTableRules = class(TMONTAJESDataTableRules, IBizMontaje,
|
|
IApplyUpdateFailedException, ISelectedRowList, IBizInformesAware)
|
|
private
|
|
FCliente : IBizCliente;
|
|
FPresupuesto : IBizPresupuestos;
|
|
FFichaBeneficios : IBizFichaBeneficiosMontaje;
|
|
FFichaBeneficiosLink: TDADataSource;
|
|
FTipoFichaBeneficios : String;
|
|
FSelectedRows : TSelectedRowList;
|
|
FLabelCount : Integer;
|
|
procedure ShowToSelect;
|
|
function OnApplyUpdateFailed: Boolean;
|
|
procedure BeforeApplyUpdates(Sender: TDADataTable; const Delta: IDADelta);
|
|
procedure AfterApplyUpdates(Sender: TDADataTable);
|
|
procedure OnPostError(DataTable: TDADataTable; Error: EDatabaseError;
|
|
var Action: TDataAction); override;
|
|
procedure AsignarReferencia;
|
|
protected
|
|
function GetLabelCount: Integer;
|
|
procedure SetLabelCount(Value: Integer);
|
|
function GetCliente: IBizCliente;
|
|
procedure SetCliente(Value: IBizCliente);
|
|
function GetPresupuesto: IBizPresupuestos;
|
|
procedure SetPresupuesto(Value: IBizPresupuestos);
|
|
function GetFichaBeneficios: IBizFichaBeneficiosMontaje;
|
|
procedure SetFichaBeneficios(Value: IBizFichaBeneficiosMontaje);
|
|
function GetTipoFichaBeneficios: String;
|
|
procedure SetTipoFichaBeneficios(Value: String);
|
|
procedure OnNewRecord(Sender: TDADataTable); override;
|
|
function GetSelectedRows : TSelectedRowList; virtual;
|
|
procedure ShowApplyUpdateFailed (const Error: EDAApplyUpdateFailed); virtual;
|
|
procedure BeforeDelete(Sender: TDADataTable); override;
|
|
public
|
|
constructor Create(aDataTable: TDADataTable); override;
|
|
destructor Destroy; override;
|
|
procedure Show; virtual;
|
|
procedure ShowAll; virtual;
|
|
procedure Preview;
|
|
procedure Print; virtual;
|
|
function ShowForSelect : TModalResult; virtual;
|
|
property SelectedRows : TSelectedRowList read GetSelectedRows;
|
|
property Cliente: IBizCliente read GetCliente write SetCliente;
|
|
property Presupuesto: IBizPresupuestos read GetPresupuesto write SetPresupuesto;
|
|
property FichaBeneficios: IBizFichaBeneficiosMontaje read GetFichaBeneficios write SetFichaBeneficios;
|
|
property TipoFichaBeneficios: String read GetTipoFichaBeneficios write SetTipoFichaBeneficios;
|
|
procedure PreviewLabels;
|
|
procedure PrintLabels;
|
|
property LabelCount: Integer read GetLabelCount write SetLabelCount;
|
|
end;
|
|
|
|
TBizFichaBeneficiosAuxDataTableRules = class(TFichaBeneficios_AuxDataTableRules, IBizFichaBeneficiosAux)
|
|
end;
|
|
|
|
TBizFichaBeneficiosMontajeDataTableRules = class(TFichaBeneficiosDataTableRules, IBizFichaBeneficiosMontaje,
|
|
IApplyUpdateFailedException)
|
|
protected
|
|
procedure OnNewRecord(Sender: TDADataTable); override;
|
|
procedure ShowApplyUpdateFailed (const Error: EDAApplyUpdateFailed); virtual;
|
|
public
|
|
procedure AnadirFichaBeneficiosDefecto(const pCodigoMontaje: integer; const Tipo: String);
|
|
end;
|
|
|
|
procedure ValidarMontaje (const AMontaje : IBizMontaje);
|
|
|
|
implementation
|
|
|
|
uses
|
|
Windows, Dialogs, uDACDSDataTable, SysUtils, uDataModuleBase, uDataModuleUsuarios,
|
|
uEditorUtils, uDataModuleMontajes, Variants, Forms, uDataModuleContactos,
|
|
uDataModulePresupuestos;
|
|
|
|
|
|
procedure ValidarMontaje (const AMontaje : IBizMontaje);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
|
|
{ TBizMontajeDataTableRules }
|
|
|
|
{
|
|
************************** TBizMontajeDataTableRules **************************
|
|
}
|
|
|
|
procedure TBizMontajeDataTableRules.OnNewRecord(Sender: TDADataTable);
|
|
begin
|
|
inherited;
|
|
CODIGOEMPRESA := dmBase.CodigoEmpresa;
|
|
USUARIO := dmUsuarios.LoginInfo.UserID;
|
|
FECHAALTA := Date;
|
|
FECHAINICIO := Date;
|
|
CODIGO := dmMontajes.GetNextAutoinc('GEN_MONTAJES');
|
|
SITUACION := SITUACION_PENDIENTERECEPCION;
|
|
|
|
//Añadimos la ficha de beneficios por defecto
|
|
FichaBeneficios.AnadirFichaBeneficiosDefecto(CODIGO, FTipoFichaBeneficios);
|
|
end;
|
|
|
|
procedure TBizMontajeDataTableRules.Show;
|
|
begin
|
|
ShowEditor(IBizMontaje, Self, etItem);
|
|
end;
|
|
|
|
procedure TBizMontajeDataTableRules.Preview;
|
|
begin
|
|
dmMontajes.PreviewFicha(Self.CODIGO);
|
|
end;
|
|
|
|
procedure TBizMontajeDataTableRules.ShowApplyUpdateFailed(
|
|
const Error: EDAApplyUpdateFailed);
|
|
begin
|
|
if (Pos(AUF_FKVIOLATION, Error.Message) > 0) then
|
|
MessageBox(0, 'No se puede borrar este montaje porque tiene pedidos asociados', 'Atención', MB_ICONWARNING or MB_OK);
|
|
end;
|
|
|
|
function TBizMontajeDataTableRules.GetSelectedRows: TSelectedRowList;
|
|
begin
|
|
Result := FSelectedRows;
|
|
end;
|
|
|
|
function TBizMontajeDataTableRules.OnApplyUpdateFailed: Boolean;
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TBizMontajeDataTableRules.ShowToSelect;
|
|
begin
|
|
//
|
|
end;
|
|
|
|
constructor TBizMontajeDataTableRules.Create(aDataTable: TDADataTable);
|
|
begin
|
|
inherited;
|
|
FLabelCount := 4; // 4 etiquetas por hoja por defecto
|
|
FCliente := Nil;
|
|
FPresupuesto := Nil;
|
|
FFichaBeneficiosLink := TDADataSource.Create(NIL);
|
|
FTipoFichaBeneficios := 'Cocina'; //Por defecto el tipo de ficha es de cocina
|
|
FSelectedRows := TSelectedRowList.Create(aDataTable);
|
|
aDataTable.OnBeforeApplyUpdates := BeforeApplyUpdates;
|
|
aDataTable.OnAfterApplyUpdates := AfterApplyUpdates;
|
|
end;
|
|
|
|
destructor TBizMontajeDataTableRules.Destroy;
|
|
begin
|
|
FCliente := Nil;
|
|
FPresupuesto := Nil;
|
|
FFichaBeneficios := Nil;
|
|
FFichaBeneficiosLink.Free;
|
|
FSelectedRows.Free;
|
|
inherited;
|
|
end;
|
|
|
|
procedure TBizMontajeDataTableRules.ShowAll;
|
|
begin
|
|
// ShowEditor(IBizProveedor, Self, etItems);
|
|
end;
|
|
|
|
function TBizMontajeDataTableRules.ShowForSelect: TModalResult;
|
|
begin
|
|
Result := ShowEditor(IBizMontaje, Self, etSelectItems);
|
|
end;
|
|
|
|
function TBizMontajeDataTableRules.GetCliente: IBizCliente;
|
|
begin
|
|
if not Assigned(FCliente) then
|
|
FCliente := dmContactos.GetCliente(CODIGOCONTACTO)
|
|
else
|
|
if (CODIGOCONTACTO <> FCliente.Codigo) and
|
|
not (FCliente.DataTable.State in dsEditModes) then
|
|
dmContactos.GetContacto(FCliente, CODIGOCONTACTO);
|
|
|
|
if not FCliente.DataTable.Active then
|
|
FCliente.DataTable.Active := True;
|
|
|
|
Result := FCliente;
|
|
end;
|
|
|
|
procedure TBizMontajeDataTableRules.SetCliente(Value: IBizCliente);
|
|
var
|
|
bEnEdicion : Boolean;
|
|
begin
|
|
bEnEdicion := (DataTable.State in dsEditModes);
|
|
if not bEnEdicion then
|
|
Edit;
|
|
FCliente := Value;
|
|
if Assigned(FCliente) then
|
|
begin
|
|
CODIGOCONTACTO := FCliente.CODIGO;
|
|
Post;
|
|
if bEnEdicion then
|
|
Edit;
|
|
end
|
|
end;
|
|
|
|
function TBizMontajeDataTableRules.GetPresupuesto: IBizPresupuestos;
|
|
begin
|
|
if not Assigned(FPresupuesto) then
|
|
FPresupuesto := dmPresupuestos.GetPresupuesto(CODIGOPRESUPUESTO)
|
|
else
|
|
if (CODIGOPRESUPUESTO <> FPresupuesto.Codigo) and
|
|
not (FPresupuesto.DataTable.State in dsEditModes) then
|
|
FPresupuesto := dmPresupuestos.GetPresupuesto(CODIGOPRESUPUESTO);
|
|
|
|
if not FPresupuesto.DataTable.Active then
|
|
FPresupuesto.DataTable.Active := True;
|
|
|
|
Result := FPresupuesto;
|
|
end;
|
|
|
|
procedure TBizMontajeDataTableRules.SetPresupuesto(Value: IBizPresupuestos);
|
|
var
|
|
bEnEdicion : Boolean;
|
|
begin
|
|
if Assigned(FPresupuesto) and (length(FPresupuesto.REFERENCIA) <> 0) then
|
|
dmPresupuestos.setReferencia(FPresupuesto, Null);
|
|
|
|
bEnEdicion := (DataTable.State in dsEditModes);
|
|
if not bEnEdicion then
|
|
Edit;
|
|
FPresupuesto := Value;
|
|
if Assigned(FPresupuesto) then
|
|
begin
|
|
CODIGOPRESUPUESTO := FPresupuesto.CODIGO;
|
|
Self.Cliente := FPresupuesto.Cliente;
|
|
Post;
|
|
if bEnEdicion then
|
|
Edit;
|
|
end
|
|
end;
|
|
|
|
procedure TBizMontajeDataTableRules.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 : asignarReferencia;
|
|
// ctDelete :
|
|
end;
|
|
end;
|
|
|
|
procedure TBizMontajeDataTableRules.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 cliente de este montaje', 'Atención', MB_ICONWARNING or MB_OK)
|
|
else
|
|
if (Pos('presupuesto', Error.Message) > 0) then
|
|
MessageBox(0, 'Debe indicar el presupuesto de este montaje', 'Atención', MB_ICONWARNING or MB_OK)
|
|
else
|
|
if (Pos('Fecha', Error.Message) > 0) then
|
|
MessageBox(0, 'Debe indicar la fecha de inicio de este montaje', 'Atención', MB_ICONWARNING or MB_OK)
|
|
else
|
|
raise Error;
|
|
end
|
|
else
|
|
raise Error;
|
|
end;
|
|
|
|
procedure TBizMontajeDataTableRules.asignarReferencia;
|
|
begin
|
|
if Length(Self.Presupuesto.REFERENCIA) = 0 then
|
|
begin
|
|
if not (Self.DataTable.State in dsEditModes) then
|
|
Self.DataTable.Edit;
|
|
Self.REFERENCIA := dmMontajes.DarNuevaReferencia(Self.Presupuesto.TIPO);
|
|
Self.Post;
|
|
dmPresupuestos.setReferencia(Self.Presupuesto, Self.REFERENCIA);
|
|
showmessage('La referencia asignada al montaje y a su presupuesto asociado es ' + Self.REFERENCIA);
|
|
end;
|
|
end;
|
|
|
|
procedure TBizMontajeDataTableRules.AfterApplyUpdates(Sender: TDADataTable);
|
|
begin
|
|
try
|
|
Self.Presupuesto.DataTable.ApplyUpdates;
|
|
except
|
|
on E: EDAApplyUpdateFailed do
|
|
raise Exception.Create('Error al asignar referencia al presupuesto');
|
|
end;
|
|
end;
|
|
|
|
procedure TBizMontajeDataTableRules.BeforeDelete(Sender: TDADataTable);
|
|
begin
|
|
inherited;
|
|
if not dmMontajes.PuedoEliminarMontaje(CODIGO) then
|
|
raise Exception.Create('No se puede borrar este montaje porque tiene pedidos asociados o artículos reservados');
|
|
end;
|
|
|
|
{ TBizFichaBeneficiosMontajeDataTableRules }
|
|
|
|
procedure TBizFichaBeneficiosMontajeDataTableRules.AnadirFichaBeneficiosDefecto(const pCodigoMontaje: integer; const Tipo: String);
|
|
var
|
|
FichaBeneficiosAux: IFichaBeneficios_Aux;
|
|
begin
|
|
FichaBeneficiosAux := dmMontajes.darFichaBeneficiosAux(Tipo);
|
|
try
|
|
with FichaBeneficiosAux.DataTable do
|
|
begin
|
|
Active := True;
|
|
while not Eof do
|
|
begin
|
|
Self.Insert;
|
|
Self.CODIGOMONTAJE := pCodigoMontaje;
|
|
Self.NUMCONCEPTO := FichaBeneficiosAux.NUMCONCEPTO;
|
|
Self.DESCRIPCION := FichaBeneficiosAux.DESCRIPCION;
|
|
Self.Post;
|
|
Next;
|
|
end;
|
|
end;
|
|
finally
|
|
FichaBeneficiosAux.DataTable.Close;
|
|
FichaBeneficiosAux := Nil;
|
|
end;
|
|
end;
|
|
|
|
procedure TBizFichaBeneficiosMontajeDataTableRules.OnNewRecord(
|
|
Sender: TDADataTable);
|
|
begin
|
|
inherited;
|
|
NUMCONCEPTO := dmMontajes.GetNextAutoinc('GEN_FICHABENEFICIOS');
|
|
DESCRIPCION := 'DESCRIPCION';
|
|
COMPRA := 0;
|
|
VENTA := 0;
|
|
end;
|
|
|
|
procedure TBizFichaBeneficiosMontajeDataTableRules.ShowApplyUpdateFailed(const Error: EDAApplyUpdateFailed);
|
|
begin
|
|
//
|
|
end;
|
|
|
|
procedure TBizMontajeDataTableRules.Print;
|
|
begin
|
|
dmMontajes.PrintFicha(Self.CODIGO);
|
|
end;
|
|
|
|
function TBizMontajeDataTableRules.GetLabelCount: Integer;
|
|
begin
|
|
Result := FLabelCount;
|
|
end;
|
|
|
|
procedure TBizMontajeDataTableRules.PreviewLabels;
|
|
begin
|
|
dmMontajes.PreviewEtiquetas(Self.CODIGO, FLabelCount);
|
|
end;
|
|
|
|
procedure TBizMontajeDataTableRules.PrintLabels;
|
|
begin
|
|
dmMontajes.PrintEtiquetas(Self.CODIGO, FLabelCount);
|
|
end;
|
|
|
|
procedure TBizMontajeDataTableRules.SetLabelCount(Value: Integer);
|
|
begin
|
|
FLabelCount := Value;
|
|
end;
|
|
|
|
function TBizMontajeDataTableRules.GetFichaBeneficios: IBizFichaBeneficiosMontaje;
|
|
begin
|
|
Result := FFichaBeneficios;
|
|
end;
|
|
|
|
procedure TBizMontajeDataTableRules.SetFichaBeneficios(
|
|
Value: IBizFichaBeneficiosMontaje);
|
|
begin
|
|
FFichaBeneficios := Value;
|
|
FFichaBeneficiosLink.DataTable := Self.DataTable;
|
|
FFichaBeneficios.DataTable.MasterSource := FFichaBeneficiosLink;
|
|
end;
|
|
|
|
function TBizMontajeDataTableRules.GetTipoFichaBeneficios: String;
|
|
begin
|
|
Result := FTipoFichaBeneficios;
|
|
end;
|
|
|
|
procedure TBizMontajeDataTableRules.SetTipoFichaBeneficios(Value: String);
|
|
begin
|
|
FTipoFichaBeneficios := Value;
|
|
end;
|
|
|
|
initialization
|
|
RegisterDataTableRules('BizMontaje', TBizMontajeDataTableRules);
|
|
RegisterDataTableRules('BizFichaBeneficiosMontaje', TBizFichaBeneficiosMontajeDataTableRules);
|
|
RegisterDataTableRules('BizFichaBeneficiosAux', TBizFichaBeneficiosAuxDataTableRules);
|
|
|
|
finalization
|
|
|
|
end.
|