unit uBizCitas;

interface

uses
  uDAInterfaces, uDADataTable, Classes, DBGrids, uDBSelectionList, DB,
  uExceptions, Controls,

  schCitasClient_Intf;

const
  BIZ_CITAS = 'BizCitas';
  BIZ_VENDEDORES = 'BizVendedores';
  BIZ_INSTALADORES = 'BizInstaladores';
  BIZ_DOCUMENTOS = 'BizDocumentos';
  BIZ_TIPOSPEDIDODOCUMENTO = 'BizTiposPedidoDocumento';
  CTE_TIPO_DOCUMENTO = 'TIPO_DOCUMENTO';
  BIZ_OBRAS = 'BizObras';

  TextoTipoCita: array[0..9] of String = ('PERSONAL', 'MEDICION', 'ENTREGA',
    'MONTAJE', 'REMATE', 'PEDIDO', 'CONFIRMACION',
    'RECEPCION', 'AVISO', 'ENTREGACLIENTE');

  LiteralTipoCita: array[0..9] of String = ('Personal', 'Medición',
    'Entrega a instalador', 'Montaje', 'Remate', 'Pedido',
    'Confirmación de pedido', 'Recepción de pedido', 'Aviso transportista',
    'Entrega al cliente');

  TextoPartidasObra: array[0..3] of String = ('COCINA', 'ENCIMERAS',
    'ELECTRO', 'VARIOS');

  LiteralPartidasObra: array[0..3] of String = ('Cocina', 'Encimeras',
    'Electrodomésticos', 'Varios');

type
  TPartidasObra = (poCocina, poEncimeras, poElectro, poVarios);
  TTipoCitas = (tcPersonal, tcMedicion, tcEntrega, tcMontaje, tcRemate,
                tcPedido, tcConfirmacion, tcRecepcion, tcAviso, tcEntregaCliente);


  IBizCitas = interface(ICitas)
  ['{B7CFAD14-99F6-4541-89B4-94B4C4B829D2}']
    procedure Show;
  end;

  IBizVendedores = interface(IVendedores)
  ['{19E86356-0BA1-4A58-A552-D68D665232DB}']
  end;

  IBizInstaladores = interface //(IInstaladores)
  ['{27917CC0-E202-4C0B-82FE-19DC2B494DB2}']
  end;

  IBizDocumentos = interface //(IDocumentos)
  ['{3000D86E-FD7B-40BD-99FB-E05C00B8FA8A}']
  end;

  IBizTiposPedidoDocumento = interface //(ITiposPedidoDocumento)
  ['{B6B48E61-C510-4ACA-BFD8-65A876010B13}']
  end;

  IBizObras = interface //(IObras)
  ['{B9A9EDDE-4F4C-46D1-B48C-2B0BB4E4580E}']
  end;

  TBizCitasDataTableRules = class(TCitasDataTableRules, IBizCitas,
    IApplyUpdateFailedException)
  private
    procedure BeforeApplyUpdates(Sender: TDADataTable; const Delta: IDADelta);
    procedure BeforePost(Sender: TDADataTable);
    procedure OnPostError(DataTable: TDADataTable; Error: EDatabaseError;
      var Action: TDataAction); override;
  protected
    procedure OnNewRecord(Sender: TDADataTable); override;
    procedure ShowApplyUpdateFailed (const Error: EDAApplyUpdateFailed); virtual;
  public
    constructor Create(aDataTable: TDADataTable); override;
    destructor Destroy; override;
    procedure Show; virtual;
  end;

  TBizVendedoresDataTableRules = class(TVendedoresDataTableRules, IBizVendedores)
  end;

  function DarTipoCita (Texto : String) : TTipoCitas;
  function esCitaFase (Texto : String) : Boolean;

implementation

uses
  Windows, Dialogs, uDACDSDataTable, SysUtils, uDataModuleBase,
  uEditorUtils, Variants,

  uDataModuleCalendarios;


function DarTipoCita (Texto : String) : TTipoCitas;
var
  i : Integer;
begin
  Result := tcPersonal;
  for I := Low(TextoTipoCita) to High(TextoTipoCita) do
  begin
    if UpperCase(TextoTipoCita[i]) = UpperCase(Texto) then
      Result := TTipoCitas(I);
  end;

  if Result = tcPersonal then
    for I := Low(LiteralTipoCita) to High(LiteralTipoCita) do
    begin
      if UpperCase(LiteralTipoCita[i]) = UpperCase(Texto) then
        Result := TTipoCitas(I);
    end;
end;

function esCitaFase (Texto : String) : Boolean;
var
  I: TTipoCitas;
begin
  Result := False;
  for I:=tcPedido to tcEntregaCliente do
  if (TextoTipoCita[Ord(I)] = Texto) then
     Result := True;
end;


{ TBizCitasDataTableRules }

{
************************** TBizCitasDataTableRules **************************
}

procedure TBizCitasDataTableRules.OnNewRecord(Sender: TDADataTable);
begin
  inherited;
  ID := dmCalendarios.GetCodigo;
end;

procedure TBizCitasDataTableRules.Show;
begin
  ShowEditor(IBizCitas, Self, etItem);
end;

procedure TBizCitasDataTableRules.ShowApplyUpdateFailed(const Error: EDAApplyUpdateFailed);
begin
//  if (Pos(AUF_FKVIOLATION, Error.Message) > 0) then
//    MessageBox(0, 'No se puede borrar esta cuenta porque tiene pagos asociados', 'Atención', MB_ICONWARNING or MB_OK);
end;

constructor TBizCitasDataTableRules.Create(aDataTable: TDADataTable);
begin
  inherited;
  aDataTable.OnBeforeApplyUpdates := BeforeApplyUpdates;
end;

destructor TBizCitasDataTableRules.Destroy;
begin
  inherited;
end;

procedure TBizCitasDataTableRules.BeforeApplyUpdates(Sender: TDADataTable; const Delta: IDADelta);
begin
//
end;

procedure TBizCitasDataTableRules.OnPostError(DataTable: TDADataTable;
  Error: EDatabaseError; var Action: TDataAction);
begin
  inherited;
  Action := daAbort;
  if (Pos(AUF_HAVEVALUE, Error.Message) > 0) then
  begin
    if (Pos('Nombre', Error.Message) > 0) then
      MessageBox(0, 'Debe indicar al menos el nombre', 'Atención', MB_ICONWARNING or MB_OK)
    else
      raise Error;
  end
  else
    raise Error;
end;

procedure TBizCitasDataTableRules.BeforePost(Sender: TDADataTable);
begin
  Sender.FieldByName(fld_CITASCODIGOCONTRATO).AsVariant := null;
end;

initialization
  RegisterDataTableRules(BIZ_CITAS, TBizCitasDataTableRules);
  RegisterDataTableRules(BIZ_VENDEDORES, TBizVendedoresDataTableRules);

finalization

end.
