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/Montajes/Reglas/uBizMontajes.pas

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.