444 lines
13 KiB
ObjectPascal
444 lines
13 KiB
ObjectPascal
{
|
|
===============================================================================
|
|
Copyright (©) 2007. Rodax Software.
|
|
===============================================================================
|
|
Los contenidos de este fichero son propiedad de Rodax Software titular del
|
|
copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado,
|
|
en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
|
|
acuerdo con los términos y condiciones establecidas en el acuerdo/contrato
|
|
bajo el que se suministra.
|
|
-----------------------------------------------------------------------------
|
|
Web: www.rodax-software.com
|
|
===============================================================================
|
|
Fecha primera versión:
|
|
Versión actual: 1.0.0
|
|
Fecha versión actual:
|
|
===============================================================================
|
|
Modificaciones:
|
|
|
|
Fecha Comentarios
|
|
---------------------------------------------------------------------------
|
|
===============================================================================
|
|
}
|
|
|
|
unit uOscOrdersController;
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, uDADataTable, uControllerBase,
|
|
|
|
uOscOrderProductsController,
|
|
uBizOscOrders, uIDataModuleTiendaWeb;
|
|
|
|
type
|
|
IOscOrdersController = interface(IObservador)
|
|
['{17765BA6-400E-4809-8548-F8EFCB94E40E}']
|
|
//function Nuevo : IBizOscOrder;
|
|
//procedure Anadir(AOscOrders : IBizOscOrder);
|
|
function Eliminar(AOscOrders : IBizOscOrder): Boolean; overload;
|
|
procedure Guardar(AOscOrders : IBizOscOrder);
|
|
procedure DescartarCambios(AOscOrders : IBizOscOrder);
|
|
//function Duplicar(AOscOrders: IBizOscOrder): IBizOscOrder;
|
|
|
|
function Buscar(const IDLocal: Integer): IBizOscOrder;
|
|
function BuscarTodos: IBizOscOrder;
|
|
procedure VerTodos(AOscOrders: IBizOscOrder);
|
|
procedure Ver(AOscOrders: IBizOscOrder);
|
|
function Localizar(AOscOrders: IBizOscOrder; AIDLocal: Integer): Boolean;
|
|
function ExtraerSeleccionados(AOscOrders: IBizOscOrder) : IBizOscOrder;
|
|
function ElegirOscOrders(AOscOrders: IBizOscOrder; AMensaje: String; AMultiSelect: Boolean): IBizOscOrder;
|
|
|
|
// Descomentar esto si hay informe
|
|
// procedure Preview(AOscOrders : IBizOscOrder);
|
|
// procedure Print(AOscOrders : IBizOscOrder);
|
|
end;
|
|
|
|
TOscOrdersController = class(TObservador, IOscOrdersController)
|
|
protected
|
|
FDataModule : IDataModuleTiendaWeb;
|
|
FOrderProductsController : IOscOrderProductsController;
|
|
|
|
procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override;
|
|
function _Vacio : IBizOscOrder;
|
|
|
|
function ValidarOscOrders(AOscOrders: IBizOscOrder): Boolean;
|
|
procedure AsignarDataModule;
|
|
procedure AsignarID(AOscOrders: IBizOscOrder; const IDNuevo: Integer);
|
|
public
|
|
constructor Create; virtual;
|
|
destructor Destroy; override;
|
|
|
|
//function Nuevo : IBizOscOrder;
|
|
//procedure Anadir(AOscOrders : IBizOscOrder);
|
|
function Eliminar(AOscOrders : IBizOscOrder): Boolean; overload;
|
|
procedure Guardar(AOscOrders : IBizOscOrder);
|
|
procedure DescartarCambios(AOscOrders : IBizOscOrder);
|
|
//function Duplicar(AOscOrders: IBizOscOrder): IBizOscOrder;
|
|
|
|
function Buscar(const IDLocal: Integer): IBizOscOrder;
|
|
function BuscarTodos: IBizOscOrder;
|
|
procedure VerTodos(AOscOrders: IBizOscOrder);
|
|
procedure Ver(AOscOrders: IBizOscOrder);
|
|
function Localizar(AOscOrders: IBizOscOrder; AIDLocal: Integer): Boolean;
|
|
function ExtraerSeleccionados(AOscOrders: IBizOscOrder) : IBizOscOrder;
|
|
function ElegirOscOrders(AOscOrders: IBizOscOrder; AMensaje: String; AMultiSelect: Boolean): IBizOscOrder;
|
|
|
|
// Descomentar esto si hay informe
|
|
// procedure Preview(AOscOrders : IBizOscOrder);
|
|
// procedure Print(AOscOrders : IBizOscOrder);
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
cxControls, DB, uEditorRegistryUtils,
|
|
uDAInterfaces, uDataTableUtils,
|
|
uDateUtils, uROTypes, DateUtils, Controls, Windows,
|
|
|
|
// Descomentar esto si hay informe
|
|
// uOscOrdersReportController,
|
|
|
|
schTiendaWebClient_Intf, uDataModuleTiendaWeb;
|
|
|
|
{ TOscOrdersController }
|
|
|
|
{procedure TOscOrdersController.Anadir(AOscOrders: IBizOscOrder);
|
|
begin
|
|
AOscOrders.Insert;
|
|
end;}
|
|
|
|
procedure TOscOrdersController.AsignarDataModule;
|
|
begin
|
|
FDataModule := TDataModuleTiendaWeb.Create(Nil);
|
|
end;
|
|
|
|
procedure TOscOrdersController.AsignarID(AOscOrders: IBizOscOrder;
|
|
const IDNuevo: Integer);
|
|
var
|
|
AContador : Integer;
|
|
begin
|
|
if not Assigned(AOscOrders) then
|
|
raise Exception.Create ('OscOrders no asignado');
|
|
|
|
// { Los detalles hay que comprobarlos siempre
|
|
// tanto en inserción como en modificación. }
|
|
if Assigned(AOscOrders.OrderProducts) then
|
|
FOrderProductsController.AsignarID(AOscOrders.OrderProducts, IDNuevo, AOscOrders.EsNuevo);
|
|
|
|
if AOscOrders.EsNuevo then
|
|
begin
|
|
AOscOrders.Edit;
|
|
AOscOrders.customers_id := IDNuevo;
|
|
AOscOrders.Post;
|
|
end;
|
|
end;
|
|
|
|
function TOscOrdersController.BuscarTodos: IBizOscOrder;
|
|
begin
|
|
Result := FDataModule.GetOSCOrders;
|
|
end;
|
|
|
|
constructor TOscOrdersController.Create;
|
|
begin
|
|
AsignarDataModule;
|
|
|
|
FOrderProductsController := TOscOrderProductsController.Create;
|
|
end;
|
|
|
|
function TOscOrdersController.Buscar(const IDLocal: Integer): IBizOscOrder;
|
|
begin
|
|
Result := FDataModule.GetOSCOrder(IDLocal);
|
|
end;
|
|
|
|
function TOscOrdersController._Vacio: IBizOscOrder;
|
|
begin
|
|
Result := Buscar(ID_NULO);
|
|
end;
|
|
|
|
procedure TOscOrdersController.DescartarCambios(AOscOrders: IBizOscOrder);
|
|
begin
|
|
if not Assigned(AOscOrders) then
|
|
raise Exception.Create ('OscOrders no asignado');
|
|
|
|
ShowHourglassCursor;
|
|
try
|
|
if (AOscOrders.State in dsEditModes) then
|
|
AOscOrders.Cancel;
|
|
|
|
AOscOrders.DataTable.CancelUpdates;
|
|
finally
|
|
HideHourglassCursor;
|
|
end;
|
|
end;
|
|
|
|
destructor TOscOrdersController.Destroy;
|
|
begin
|
|
FDataModule := NIL;
|
|
FOrderProductsController := NIL;
|
|
inherited;
|
|
end;
|
|
|
|
|
|
{function TOscOrdersController.Duplicar(AOscOrders: IBizOscOrder): IBizOscOrder;
|
|
begin
|
|
Result := Self._Vacio;
|
|
ShowHourglassCursor;
|
|
try
|
|
DuplicarRegistros(AOscOrders.DataTable, Result.DataTable, mdrActual);
|
|
|
|
// Descomentar esto si hay detalles
|
|
// DuplicarRegistros(AOscOrders.Detalles.DataTable, Result.Detalles.DataTable, mdrTodos);
|
|
|
|
// ¡CUIDADO! Hay que dejar algunos campos como si fuera todo nuevo
|
|
Result.Edit;
|
|
with Result do
|
|
begin
|
|
// Ejemplos
|
|
// ID_EMPRESA := dmUsuarios.IDEmpresaActual;
|
|
// USUARIO := dmUsuarios.LoginInfo.Usuario;
|
|
// REFERENCIA := ''; //Para que se asigne una nueva
|
|
// FECHA_FACTURA := DateOf(Now);
|
|
// SITUACION := SITUACION_PENDIENTE;
|
|
end;
|
|
|
|
Result.Post;
|
|
finally
|
|
HideHourglassCursor;
|
|
end;
|
|
end;}
|
|
|
|
|
|
function TOscOrdersController.ValidarOscOrders(AOscOrders: IBizOscOrder): Boolean;
|
|
begin
|
|
Result := False;
|
|
|
|
if not Assigned(AOscOrders) then
|
|
raise Exception.Create ('OscOrders no asignado');
|
|
|
|
if (AOscOrders.DataTable.State in dsEditModes) then
|
|
AOscOrders.DataTable.Post;
|
|
|
|
// Descomentar esto si hay detalles
|
|
// // Tambien hacemos post de sus tablas hija
|
|
// if (AOscOrders.Detalles.DataTable.State in dsEditModes) then
|
|
// AOscOrders.Detalles.DataTable.Post;
|
|
|
|
|
|
// Ejemplos de validaciones
|
|
{
|
|
if (AOscOrders.ID_CLIENTE < 0) or
|
|
(not Assigned(AOscOrders.Cliente)) or
|
|
(AOscOrders.Cliente.IsEmpty) then
|
|
raise Exception.Create('Debe indicar el cliente de esta factura');
|
|
|
|
if (EsFechaVacia(AOscOrders.FECHA_FACTURA)) then
|
|
raise Exception.Create('Debe indicar la fecha de esta factura');
|
|
|
|
if Length(AOscOrders.REFERENCIA) = 0 then
|
|
raise Exception.Create('Debe indicar una referencia para esta forma de pago.');
|
|
|
|
if Length(AOscOrders.DESCRIPCION) = 0 then
|
|
raise Exception.Create('Debe indicar una descripción para esta forma de pago.');
|
|
}
|
|
|
|
|
|
{ Asegurarse de valores en campos "automáticos" tanto
|
|
en MODIFICACIÓN como en INSERCIÓN. }
|
|
{ AOscOrders.Edit;
|
|
try
|
|
AOscOrders.USUARIO := dmUsuarios.LoginInfo.Usuario;
|
|
Result := True;
|
|
finally
|
|
AOscOrders.Post;
|
|
end;}
|
|
|
|
Result := True;
|
|
end;
|
|
|
|
procedure TOscOrdersController.Ver(AOscOrders: IBizOscOrder);
|
|
{var
|
|
AEditor : IEditorOscOrders;}
|
|
begin
|
|
{ AEditor := NIL;
|
|
ShowHourglassCursor;
|
|
try
|
|
CreateEditor('EditorOscOrders', IEditorOscOrders, AEditor);
|
|
with AEditor do
|
|
OscOrders := AOscOrders;
|
|
finally
|
|
HideHourglassCursor;
|
|
end;
|
|
|
|
if Assigned(AEditor) then
|
|
try
|
|
AEditor.ShowModal;
|
|
AEditor.Release;
|
|
finally
|
|
AEditor := NIL;
|
|
end;}
|
|
end;
|
|
|
|
procedure TOscOrdersController.VerTodos(AOscOrders: IBizOscOrder);
|
|
{var
|
|
AEditor : IEditorOscOrders;}
|
|
begin
|
|
{ AEditor := NIL;
|
|
ShowHourglassCursor;
|
|
try
|
|
CreateEditor('EditorOscOrders', IEditorOscOrders, AEditor);
|
|
with AEditor do
|
|
OscOrders := AOscOrders;
|
|
finally
|
|
HideHourglassCursor;
|
|
end;
|
|
|
|
if Assigned(AEditor) then
|
|
try
|
|
AEditor.ShowModal;
|
|
AEditor.Release;
|
|
finally
|
|
AEditor := NIL;
|
|
end;}
|
|
end;
|
|
|
|
function TOscOrdersController.Eliminar(AOscOrders: IBizOscOrder): Boolean;
|
|
begin
|
|
Result := False;
|
|
|
|
if not Assigned(AOscOrders) then
|
|
raise Exception.Create ('OscOrders no asignado');
|
|
|
|
ShowHourglassCursor;
|
|
try
|
|
if (AOscOrders.State in dsEditModes) then
|
|
AOscOrders.Cancel;
|
|
|
|
AOscOrders.Delete;
|
|
AOscOrders.DataTable.ApplyUpdates;
|
|
HideHourglassCursor;
|
|
Result := True;
|
|
finally
|
|
HideHourglassCursor;
|
|
end;
|
|
end;
|
|
|
|
procedure TOscOrdersController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable);
|
|
// Descomentar si hubiera detalles
|
|
{var
|
|
AOscOrders : IBizOscOrder;
|
|
ADetalles : IBizDetallesOscOrders;}
|
|
begin
|
|
inherited;
|
|
|
|
// Descomentar si hubiera detalles
|
|
{if Supports(ADataTable, IBizDetallesOscOrders, ADetalles) and
|
|
Supports(ADetalles.DataTable.MasterSource.DataTable, IBizOscOrder, AOscOrders) then
|
|
begin
|
|
AOscOrders.Edit;
|
|
try
|
|
AOscOrders.IMPORTE_TOTAL := FDetallesController.DarTotalImporteTotal(ADetalles);
|
|
finally
|
|
AOscOrders.Post;
|
|
end;
|
|
end;}
|
|
end;
|
|
|
|
procedure TOscOrdersController.Guardar(AOscOrders: IBizOscOrder);
|
|
var
|
|
NuevoID : Integer;
|
|
begin
|
|
if ValidarOscOrders(AOscOrders) then
|
|
begin
|
|
ShowHourglassCursor;
|
|
try
|
|
if AOscOrders.EsNuevo then
|
|
NuevoID := FDataModule.GetNextIDOSC('customers')
|
|
else
|
|
NuevoID := AOscOrders.customers_id;
|
|
|
|
AsignarID(AOscOrders, NuevoID);
|
|
AOscOrders.DataTable.ApplyUpdates;
|
|
finally
|
|
HideHourglassCursor;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function TOscOrdersController.Localizar(AOscOrders: IBizOscOrder; AIDLocal: Integer): Boolean;
|
|
begin
|
|
Result := True;
|
|
ShowHourglassCursor;
|
|
try
|
|
with AOscOrders.DataTable do
|
|
begin
|
|
DisableControls;
|
|
First;
|
|
if not Locate(fld_osc_Ordersrdx_orders_id_local, AIDLocal, []) then
|
|
Result := False;
|
|
EnableControls;
|
|
end;
|
|
finally
|
|
HideHourglassCursor;
|
|
end;
|
|
end;
|
|
|
|
function TOscOrdersController.ExtraerSeleccionados(AOscOrders: IBizOscOrder): IBizOscOrder;
|
|
var
|
|
ASeleccionados : IBizOscOrder;
|
|
begin
|
|
ASeleccionados := (Self.Buscar(ID_NULO) as IBizOscOrder);
|
|
CopyDataTable(AOscOrders.DataTable, ASeleccionados.DataTable, True);
|
|
Result := ASeleccionados;
|
|
end;
|
|
|
|
function TOscOrdersController.ElegirOscOrders(AOscOrders: IBizOscOrder; AMensaje: String; AMultiSelect: Boolean): IBizOscOrder;
|
|
{var
|
|
AEditor : IEditorElegirOscOrders;}
|
|
begin
|
|
Result := NIL;
|
|
|
|
{ CreateEditor('EditorElegirOscOrders', IEditorElegirOscOrders, AEditor);
|
|
try
|
|
with AEditor do
|
|
begin
|
|
OscOrders := AOscOrders;
|
|
MultiSelect := AMultiSelect;
|
|
Mensaje := AMensaje;
|
|
if IsPositiveResult(ShowModal) then
|
|
Result := OscOrdersSeleccionados;
|
|
Release;
|
|
end;
|
|
finally
|
|
AEditor := NIL;
|
|
end;}
|
|
end;
|
|
|
|
// Descomentar esto si hay informe
|
|
// procedure TOscOrdersController.Preview(AOscOrders: IBizOscOrder);
|
|
// var
|
|
// AReportController : IOscOrdersReportController;
|
|
// begin
|
|
// AReportController := TOscOrdersReportController.Create;
|
|
// try
|
|
// AReportController.Preview(AOscOrders.ID);
|
|
// finally
|
|
// AReportController := NIL;
|
|
// end;
|
|
// end;
|
|
|
|
// Descomentar esto si hay informe
|
|
// procedure TOscOrdersController.Print(AOscOrders: IBizOscOrder);
|
|
// var
|
|
// AReportController : IOscOrdersReportController;
|
|
// begin
|
|
// AReportController := TOscOrdersReportController.Create;
|
|
// try
|
|
// AReportController.Print(AOscOrders.ID);
|
|
// finally
|
|
// AReportController := NIL;
|
|
// end;
|
|
// end;
|
|
|
|
end.
|