2007-11-28 17:40:31 +00:00
unit uPedidosProveedorController;
interface
uses
2022-02-09 15:00:16 +00:00
SysUtils, uDADataTable, Classes,
2007-11-28 17:40:31 +00:00
uControllerBase, uIDataModulePedidosProveedor, uProveedoresController,
2014-12-12 14:40:38 +00:00
uDetallesPedidoProveedorController, uBizPedidosProveedor, uGestorDocumentosController;
2007-11-28 17:40:31 +00:00
type
2008-07-14 14:35:47 +00:00
IPedidosProveedorController = interface( IControllerBase)
2007-11-28 17:40:31 +00:00
[ '{404FFA2F-D683-447D-91E6-C9A7322934D8}' ]
function GetProveedorController: IProveedoresController;
procedure SetProveedorController( const Value: IProveedoresController) ;
property ProveedorController: IProveedoresController read GetProveedorController write SetProveedorController;
function GetDetallesController: IDetallesPedidoProveedorController;
procedure SetDetallesController( const Value: IDetallesPedidoProveedorController) ;
property DetallesController: IDetallesPedidoProveedorController read GetDetallesController write SetDetallesController;
2014-12-12 14:40:38 +00:00
//GESTION_DOCUMENTOS
function GetGestorDocumentosController: IGestorDocumentosController;
procedure SetGestorDocumentosController( const Value: IGestorDocumentosController) ;
property GestorDocumentosController: IGestorDocumentosController read GetGestorDocumentosController write SetGestorDocumentosController;
2007-11-28 17:40:31 +00:00
function Buscar( const ID: Integer ) : IBizPedidoProveedor;
function BuscarTodos: IBizPedidoProveedor;
function BuscarPendientesRecepcion: IBizPedidoProveedor;
procedure Ver( APedido : IBizPedidoProveedor) ;
2015-01-23 10:52:00 +00:00
procedure VerTodos( APedidos: IBizPedidoProveedor;
const AVerModal : Boolean = False ; const AWindowCaption: String = '' ;
const AHeaderText: String = '' ) ;
function BuscarDelContrato( const ID_CONTRATO: Integer ) : IBizPedidoProveedor;
2007-11-28 17:40:31 +00:00
procedure VerDireccionEntrega( APedido : IBizPedidoProveedor) ;
function Nuevo : IBizPedidoProveedor;
procedure Anadir( APedido : IBizPedidoProveedor) ;
function Eliminar( const ID : Integer ) : Boolean ; overload ;
function Eliminar( APedido : IBizPedidoProveedor; AllItems: Boolean = false ) : Boolean ; overload ;
function Guardar( APedido : IBizPedidoProveedor) : Boolean ;
procedure DescartarCambios( APedido : IBizPedidoProveedor) ;
function Existe( const ID: Integer ) : Boolean ;
2017-10-25 14:38:21 +00:00
function Duplicar( APedido: IBizPedidoProveedor; ConMismoContrato: Boolean = false ) : IBizPedidoProveedor;
2007-11-28 17:40:31 +00:00
procedure Preview( APedido : IBizPedidoProveedor; AllItems: Boolean = false ) ;
procedure Print( APedido : IBizPedidoProveedor; AllItems: Boolean = false ) ;
2015-09-10 14:47:04 +00:00
procedure EnviarPedidoPorEMail( APedido : IBizPedidoProveedor) ;
2007-11-28 17:40:31 +00:00
procedure RecalcularImportes( APedido: IBizPedidoProveedor) ;
function EsModificable( APedido : IBizPedidoProveedor) : Boolean ;
function EsEliminable( APedido : IBizPedidoProveedor) : Boolean ;
function CambiarSituacion( APedido: IBizPedidoProveedor; ASituacion : String ; AFechaPagado: TDateTime = 0 ; DoPost : Boolean = True ) : Boolean ; overload ;
function CambiarSituacion( APedido: IBizPedidoProveedor) : Boolean ; overload ;
2022-02-09 15:00:16 +00:00
function DarListaAnosPedidos: TStringList;
procedure FiltrarAno( APedido: IBizPedidoProveedor; ADynWhereDataTable: WideString ; const Ano: String ) ;
2007-11-28 17:40:31 +00:00
function ExtraerSeleccionados( APedido: IBizPedidoProveedor) : IBizPedidoProveedor;
function ElegirPedidos( APedido: IBizPedidoProveedor; AMensaje: String ; AMultiSelect: Boolean ) : IBizPedidoProveedor;
procedure RecuperarProveedor( APedido: IBizPedidoProveedor) ;
2022-09-09 09:36:39 +00:00
Procedure AsignarContrato( APedido: IBizPedidoProveedor; const ID_CONTRATO: Integer ; AReferencia, ANombreCliente: String ) ;
2007-11-28 17:40:31 +00:00
end ;
2008-07-14 14:35:47 +00:00
TPedidosProveedorController = class( TControllerBase, IPedidosProveedorController)
2007-11-28 17:40:31 +00:00
protected
FDataModule : IDataModulePedidosProveedor;
FProveedorController : IProveedoresController;
FDetallesController : IDetallesPedidoProveedorController;
2014-12-12 14:40:38 +00:00
FGestorDocumentosController : IGestorDocumentosController;
//GESTION_DOCUMENTOS
function GetGestorDocumentosController: IGestorDocumentosController;
procedure SetGestorDocumentosController( const Value: IGestorDocumentosController) ;
2007-11-28 17:40:31 +00:00
function GetProveedorController: IProveedoresController;
procedure SetProveedorController( const Value: IProveedoresController) ;
procedure RecuperarProveedor( APedido : IBizPedidoProveedor) ;
function GetDetallesController: IDetallesPedidoProveedorController;
procedure SetDetallesController( const Value: IDetallesPedidoProveedorController) ;
//Estos son los tres m<> todos a sobre escribir si se desea heredar toda la logica de
//este controller
procedure AsignarDataModule; virtual ;
procedure RecuperarObjetos( APedido: IBizPedidoProveedor) ; virtual ;
function CreateEditor( const AName : String ; const IID: TGUID; out Intf) : Boolean ;
procedure FiltrarEmpresa( APedido: IBizPedidoProveedor) ;
function _Vacio : IBizPedidoProveedor;
function ValidarPedido( APedido: IBizPedidoProveedor) : Boolean ;
function ValidarSituacion( ASituacion: String ; AFechaPedido: TDateTime;
var AFechaRecepcion: TDateTime) : Boolean ;
public
property ProveedorController: IProveedoresController read GetProveedorController write SetProveedorController;
property DetallesController: IDetallesPedidoProveedorController read GetDetallesController write SetDetallesController;
2014-12-12 14:40:38 +00:00
property GestorDocumentosController: IGestorDocumentosController read GetGestorDocumentosController write SetGestorDocumentosController;
2007-11-28 17:40:31 +00:00
procedure RecibirAviso( ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable) ; override ;
constructor Create; override ;
destructor Destroy; override ;
function Eliminar( const ID : Integer ) : Boolean ; overload ;
function Eliminar( APedido : IBizPedidoProveedor; AllItems: Boolean = false ) : Boolean ; overload ;
function Guardar( APedido : IBizPedidoProveedor) : Boolean ;
procedure DescartarCambios( APedido : IBizPedidoProveedor) ; virtual ;
function Existe( const ID: Integer ) : Boolean ; virtual ;
procedure Anadir( APedido : IBizPedidoProveedor) ;
function Buscar( const ID: Integer ) : IBizPedidoProveedor;
function BuscarTodos: IBizPedidoProveedor;
function BuscarPendientesRecepcion: IBizPedidoProveedor;
2015-01-23 10:52:00 +00:00
function BuscarDelContrato( const ID_CONTRATO: Integer ) : IBizPedidoProveedor;
2007-11-28 17:40:31 +00:00
function Nuevo : IBizPedidoProveedor;
procedure Ver( APedido : IBizPedidoProveedor) ;
2015-01-23 10:52:00 +00:00
procedure VerTodos( APedidos: IBizPedidoProveedor;
const AVerModal : Boolean = False ; const AWindowCaption: String = '' ;
const AHeaderText: String = '' ) ;
2007-11-28 17:40:31 +00:00
procedure VerDireccionEntrega( APedido : IBizPedidoProveedor) ;
2017-10-25 14:38:21 +00:00
function Duplicar( APedido: IBizPedidoProveedor; ConMismoContrato: Boolean = false ) : IBizPedidoProveedor;
2007-11-28 17:40:31 +00:00
procedure Preview( APedido : IBizPedidoProveedor; AllItems: Boolean = false ) ;
procedure Print( APedido : IBizPedidoProveedor; AllItems: Boolean = false ) ;
2015-09-10 14:47:04 +00:00
procedure EnviarPedidoPorEMail( APedido : IBizPedidoProveedor) ;
2007-11-28 17:40:31 +00:00
procedure RecalcularImportes( APedido: IBizPedidoProveedor) ;
function EsModificable( APedido : IBizPedidoProveedor) : Boolean ;
function EsEliminable( APedido : IBizPedidoProveedor) : Boolean ;
function CambiarSituacion( APedido: IBizPedidoProveedor; ASituacion : String ; AFechaRecepcion: TDateTime = 0 ; DoPost : Boolean = True ) : Boolean ; overload ;
function CambiarSituacion( APedido: IBizPedidoProveedor) : Boolean ; overload ;
function ExtraerSeleccionados( APedido: IBizPedidoProveedor) : IBizPedidoProveedor;
function ElegirPedidos( APedido: IBizPedidoProveedor; AMensaje: String ; AMultiSelect: Boolean ) : IBizPedidoProveedor;
2022-09-09 09:36:39 +00:00
Procedure AsignarContrato( APedido: IBizPedidoProveedor; const ID_CONTRATO: Integer ; AReferencia, ANombreCliente: String ) ;
2022-02-09 15:00:16 +00:00
function DarListaAnosPedidos: TStringList;
procedure FiltrarAno( APedido: IBizPedidoProveedor; ADynWhereDataTable: WideString ; const Ano: String ) ;
2007-11-28 17:40:31 +00:00
end ;
2014-12-12 14:40:38 +00:00
2007-11-28 17:40:31 +00:00
implementation
uses
uROTypes, Controls, cxControls, DB, uEditorRegistryUtils, uEditorPreview, DateUtils,
uIEditorPedidosProveedor, uDataModulePedidosProveedor, uFactuGES_App,
uBizDetallesPedidoProveedor, uBizContactos, uDataTableUtils, uDataModuleUsuarios,
schPedidosProveedorClient_Intf, uDAInterfaces, uPedidosProveedorReportController,
uDateUtils, uIEditorPedidoProveedor, uIEditorElegirPedidosProveedor,
2022-02-09 15:00:16 +00:00
Dialogs, uIEditorDireccionEntregaPedidoProveedor, FactuGES_Intf,
2015-09-10 14:47:04 +00:00
uIEditorSituacionPedidoProveedor, Variants, uStringsUtils, uSistemaFunc, uEMailUtils, uDialogElegirEMail;
2007-11-28 17:40:31 +00:00
{ TPedidosProveedorController }
procedure TPedidosProveedorController. Anadir( APedido: IBizPedidoProveedor) ;
begin
APedido. Insert;
end ;
2022-09-09 09:36:39 +00:00
procedure TPedidosProveedorController. AsignarContrato( APedido: IBizPedidoProveedor; const ID_CONTRATO: Integer ; AReferencia, ANombreCliente: String ) ;
begin
//Asignaremos el ID de contrato a cap<61> n as<61> como la refencia, con el fin de no tener que a<> adir relaci<63> n con modulo contratos, evitando redundancia ciclica
if not Assigned( APedido) then
raise Exception. Create ( 'Pedido no asignado (CambiarSituacion)' ) ;
if not APedido. DataTable. Active then
APedido. DataTable. Active : = True ;
ShowHourglassCursor;
APedido. DataTable. DisableControls;
try
APedido. Edit;
APedido. ID_CONTRATO_CLIENTE : = ID_CONTRATO;
APedido. REF_CON_CLIENTE : = AReferencia;
APedido. NOMBRE_CLIENTE : = ANombreCliente;
// APedido.Post;
finally
APedido. DataTable. EnableControls;
HideHourglassCursor;
end ;
end ;
2007-11-28 17:40:31 +00:00
procedure TPedidosProveedorController. AsignarDataModule;
begin
FDataModule : = TDataModulePedidosProveedor. Create( Nil ) ;
end ;
function TPedidosProveedorController. Buscar( const ID: Integer ) : IBizPedidoProveedor;
begin
Result : = FDataModule. GetItem( ID) ;
FiltrarEmpresa( Result ) ;
end ;
2015-01-23 10:52:00 +00:00
function TPedidosProveedorController. BuscarDelContrato( const ID_CONTRATO: Integer ) : IBizPedidoProveedor;
var
Condicion: TDAWhereExpression;
begin
ShowHourglassCursor;
try
Result : = BuscarTodos;
// Filtrar los pedidos pendientes de recepcion
with Result . DataTable. DynamicWhere do
begin
// (ID_CONTRATO_CLIENTE = ID_CONTRATO)
Condicion : = NewBinaryExpression( NewField( '' , fld_PedidosProveedorID_CONTRATO_CLIENTE) , NewConstant( ID_CONTRATO, datInteger) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
finally
HideHourglassCursor;
end ;
end ;
2007-11-28 17:40:31 +00:00
function TPedidosProveedorController. BuscarPendientesRecepcion: IBizPedidoProveedor;
var
Condicion: TDAWhereExpression;
begin
ShowHourglassCursor;
try
Result : = BuscarTodos;
// Filtrar los pedidos pendientes de recepcion
with Result . DataTable. DynamicWhere do
begin
// (SITUACION <> RECIBIDO)
Condicion : = NewBinaryExpression( NewField( '' , fld_PedidosProveedorSITUACION) , NewConstant( SITUACION_PEDIDO_RECIBIDO, datString) , dboNotEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
finally
HideHourglassCursor;
end ;
end ;
function TPedidosProveedorController. BuscarTodos: IBizPedidoProveedor;
begin
Result : = FDataModule. GetItems;
FiltrarEmpresa( Result ) ;
end ;
constructor TPedidosProveedorController. Create;
begin
inherited ;
AsignarDataModule;
FProveedorController : = TProveedoresController. Create;
FDetallesController : = TDetallesPedidoProveedorController. Create;
FDetallesController. addObservador( Self) ;
2014-12-12 14:40:38 +00:00
//GESTION_DOCUMENTOS
FGestorDocumentosController : = TGestorDocumentosController. Create;
FGestorDocumentosController. Almacen : = TRdxAlmacenes_PedidosProveedor;
2007-11-28 17:40:31 +00:00
end ;
function TPedidosProveedorController. CreateEditor( const AName: String ;
const IID: TGUID; out Intf) : Boolean ;
begin
Result : = Supports( EditorRegistry. CreateEditor( AName) , IID, Intf) ;
end ;
2022-02-09 15:00:16 +00:00
function TPedidosProveedorController. DarListaAnosPedidos: TStringList;
begin
Result : = FDataModule. GetAnosItems;
end ;
2007-11-28 17:40:31 +00:00
procedure TPedidosProveedorController. DescartarCambios( APedido: IBizPedidoProveedor) ;
begin
if not Assigned( APedido) then
raise Exception. Create ( 'Pedido no asignado' ) ;
ShowHourglassCursor;
try
if ( APedido. State in dsEditModes) then
APedido. Cancel;
APedido. DataTable. CancelUpdates;
finally
HideHourglassCursor;
end ;
end ;
function TPedidosProveedorController. CambiarSituacion( APedido: IBizPedidoProveedor; ASituacion: String ; AFechaRecepcion: TDateTime;
DoPost: Boolean ) : Boolean ;
begin
Result : = False ;
if not Assigned( APedido) then
raise Exception. Create ( 'Pedido no asignado (CambiarSituacion)' ) ;
if not APedido. DataTable. Active then
APedido. DataTable. Active : = True ;
// Validar la situaci<63> n del pedido
if ValidarSituacion( ASituacion, APedido. FECHA_PEDIDO, AFechaRecepcion) then
begin
ShowHourglassCursor;
APedido. DataTable. DisableControls;
try
APedido. Edit;
APedido. SITUACION : = ASituacion;
if AFechaRecepcion < > APedido. FECHA_ENTREGA then
APedido. FECHA_ENTREGA : = AFechaRecepcion;
APedido. Post;
if DoPost then
2019-03-19 16:34:55 +00:00
APedido. DataTable. ApplyUpdates;
// Guardar(APedido); Hace que cambie el proveedor asignado al pedido en la validaci<63> n ya que se reasigna el id del proveedor al validar el pedido
2007-11-28 17:40:31 +00:00
Result : = True ;
finally
APedido. DataTable. EnableControls;
HideHourglassCursor;
end ;
end ;
end ;
function TPedidosProveedorController. CambiarSituacion( APedido: IBizPedidoProveedor) : Boolean ;
var
AEditor : IEditorSituacionPedidoProveedor;
begin
Result : = False ;
AEditor : = NIL ;
2008-11-11 18:52:28 +00:00
RecuperarProveedor( APedido) ;
CreateEditor( 'EditorSituacionPedidoProveedor' , IEditorSituacionPedidoProveedor, AEditor) ;
if Assigned( AEditor) then
2008-11-13 20:19:16 +00:00
try
AEditor. Controller : = Self; //OJO ORDEN MUY IMPORTANTE
AEditor. PedidoProveedor : = APedido;
AEditor. ShowModal;
Result : = True ;
finally
AEditor. Release;
AEditor : = NIL ;
end ;
2007-11-28 17:40:31 +00:00
end ;
destructor TPedidosProveedorController. Destroy;
begin
FDataModule : = Nil ;
FProveedorController : = Nil ;
FDetallesController : = Nil ;
2014-12-12 14:40:38 +00:00
//GESTION_DOCUMENTOS
FGestorDocumentosController : = Nil ;
inherited ;
2007-11-28 17:40:31 +00:00
end ;
2017-10-25 14:38:21 +00:00
function TPedidosProveedorController. Duplicar( APedido: IBizPedidoProveedor; ConMismoContrato: Boolean = false ) : IBizPedidoProveedor;
2007-11-28 17:40:31 +00:00
begin
Result : = Self. _Vacio;
ShowHourglassCursor;
try
DuplicarRegistros( APedido. DataTable, Result . DataTable, mdrActual) ;
DuplicarRegistros( APedido. Detalles. DataTable, Result . Detalles. DataTable, mdrTodos) ;
// Hay que dejar algunos campos como si fuera un presupuesto nuevo
Result . Edit;
with Result do
begin
REFERENCIA : = '' ;
ID_EMPRESA : = AppFactuGES. EmpresaActiva. ID;
USUARIO : = AppFactuGES. UsuarioActivo. UserName;
FECHA_PEDIDO : = DateOf( Now) ;
SITUACION : = SITUACION_PEDIDO_PENDIENTE;
FECHA_ENVIO : = 0 ;
FECHA_CONFIRMACION : = 0 ;
FECHA_ENTREGA : = 0 ;
INCIDENCIAS_ACTIVAS : = 0 ;
// INCIDENCIAS := Nil;
2017-10-25 14:38:21 +00:00
if not ConMismoContrato then
begin
REF_CON_CLIENTE : = '' ;
ID_CONTRATO_CLIENTE : = 0 ;
ID_DIRECCION_CLIENTE : = 0 ;
end ;
2007-11-28 17:40:31 +00:00
end ;
2016-07-22 17:05:20 +00:00
Result . AsignarVendedor;
2007-11-28 17:40:31 +00:00
Result . Post;
finally
HideHourglassCursor;
end ;
end ;
function TPedidosProveedorController. ValidarPedido(
APedido: IBizPedidoProveedor) : Boolean ;
begin
Result : = False ;
if not Assigned( APedido) then
raise Exception. Create ( 'Pedido no asignado' ) ;
if ( APedido. DataTable. State in dsEditModes) then
APedido. DataTable. Post;
//Tambien hacemos post de sus tablas hija
if ( APedido. Detalles. DataTable. State in dsEditModes) then
APedido. Detalles. DataTable. Post;
2016-09-12 17:36:53 +00:00
if ( APedido. ID_PROVEEDOR < = 0 ) then
2014-12-12 14:40:38 +00:00
// Si hay altas autom<6F> ticas no hay objeto Proveedor pero s<> hay ID_PROVEEDOR
{ ( not Assigned( APedido. Proveedor) ) or
( APedido. Proveedor. IsEmpty) then }
2016-09-12 17:36:53 +00:00
raise Exception. Create( 'Debe indicar el proveedor de este pedido' ) ;
2007-11-28 17:40:31 +00:00
if ( EsFechaVacia( APedido. FECHA_PEDIDO) ) then
raise Exception. Create( 'Debe indicar la fecha de este pedido' ) ;
2016-09-12 17:36:53 +00:00
if ( Length( APedido. CALLE) = 0 ) and ( APedido. ID_ALMACEN = 0 ) and ( APedido. ID_DIRECCION_CLIENTE = 0 ) then
2007-11-28 17:40:31 +00:00
raise Exception. Create( 'Debe indicar una direcci<63> n de entrega o almac<61> n para este pedido' ) ;
if ( APedido. Detalles. DataTable. RecordCount = 0 ) then
raise Exception. Create( 'Debe indicar al menos un concepto en el contenido del pedido' ) ;
{ Asegurarse de valores en campos "autom<6F> ticos" tanto
en MODIFICACI<EFBFBD> N como en INSERCI<EFBFBD> N. }
APedido. Edit;
try
APedido. USUARIO : = AppFactuGES. UsuarioActivo. UserName;
if Assigned( APedido. Proveedor)
and ( APedido. ID_PROVEEDOR < > APedido. Proveedor. ID) then
APedido. ID_PROVEEDOR : = APedido. Proveedor. ID;
Result : = True ;
finally
APedido. Post;
end ;
end ;
function TPedidosProveedorController. ValidarSituacion( ASituacion: String ;
AFechaPedido: TDateTime; var AFechaRecepcion: TDateTime) : Boolean ;
begin
Result : = False ;
if ASituacion = SITUACION_PEDIDO_PENDIENTE then
AFechaRecepcion : = 0
else
if ( ASituacion = SITUACION_PEDIDO_PARCIAL)
or ( ASituacion = SITUACION_PEDIDO_RECIBIDO) then
begin
if ( EsFechaVacia( AFechaRecepcion) ) then
raise Exception. Create( 'Hay que indicar una fecha de recepci<63> n' )
else if ( AFechaRecepcion < AFechaPedido) then
raise Exception. Create( 'La fecha de recepci<63> n debe ser posterior a la fecha del pedido' ) ;
end ;
Result : = True ;
end ;
procedure TPedidosProveedorController. Ver( APedido: IBizPedidoProveedor) ;
var
AEditor : IEditorPedidoProveedor;
begin
AEditor : = NIL ;
2008-11-11 18:52:28 +00:00
RecuperarObjetos( APedido) ;
CreateEditor( 'EditorPedidoProveedor' , IEditorPedidoProveedor, AEditor) ;
if Assigned( AEditor) then
2008-11-13 20:19:16 +00:00
try
AEditor. Controller : = Self; //OJO ORDEN MUY IMPORTANTE
AEditor. Pedido : = APedido;
//MODO CONSULTAR
if not EsModificable( APedido) then
begin
SetDataTableReadOnly( APedido. DataTable, True ) ;
AEditor. ReadOnly : = True ;
2007-11-28 17:40:31 +00:00
end ;
2008-11-13 20:19:16 +00:00
AEditor. ShowModal;
//MODO CONSULTAR (Se deja la tabla como estaba)
if AEditor. ReadOnly then
SetDataTableReadOnly( APedido. DataTable, False ) ;
finally
AEditor. Release;
AEditor : = NIL ;
2008-11-11 18:52:28 +00:00
end ;
2007-11-28 17:40:31 +00:00
end ;
2015-01-23 10:52:00 +00:00
procedure TPedidosProveedorController. VerTodos( APedidos: IBizPedidoProveedor;
const AVerModal : Boolean = False ; const AWindowCaption: String = '' ;
const AHeaderText: String = '' ) ;
2007-11-28 17:40:31 +00:00
var
AEditor : IEditorPedidosProveedor;
begin
AEditor : = NIL ;
2008-11-11 18:52:28 +00:00
CreateEditor( 'EditorPedidosProveedor' , IEditorPedidosProveedor, AEditor) ;
if Assigned( AEditor) then
2015-01-23 10:52:00 +00:00
try
if not EsCadenaVacia( AWindowCaption) then
AEditor. WindowCaption : = AWindowCaption;
if not EsCadenaVacia( AHeaderText) then
AEditor. HeaderText : = AHeaderText;
AEditor. Controller : = Self; //OJO ORDEN MUY IMPORTANTE
AEditor. Pedidos : = APedidos;
AEditor. MultiSelect : = True ;
if AVerModal then
AEditor. ShowModal
else
AEditor. ShowEmbedded;
finally
if AVerModal then
AEditor. Release;
AEditor : = NIL ;
end ;
2007-11-28 17:40:31 +00:00
end ;
procedure TPedidosProveedorController. VerDireccionEntrega(
APedido: IBizPedidoProveedor) ;
var
AEditor : IEditorDireccionEntregaPedidoProveedor;
begin
AEditor : = NIL ;
2008-11-11 18:52:28 +00:00
//RecuperarObjetos(APedido); <- No descomentar. No hace falta
CreateEditor( 'EditorDireccionEntregaPedidoProveedor' , IEditorDireccionEntregaPedidoProveedor, AEditor) ;
if Assigned( AEditor) then
2008-11-13 20:19:16 +00:00
try
AEditor. Pedido : = APedido;
AEditor. ShowModal;
finally
AEditor. Release;
AEditor : = NIL ;
end ;
2007-11-28 17:40:31 +00:00
end ;
function TPedidosProveedorController. _Vacio: IBizPedidoProveedor;
begin
Result : = Buscar( ID_NULO) ;
end ;
function TPedidosProveedorController. Eliminar( const ID: Integer ) : Boolean ;
var
APedido : IBizPedidoProveedor;
begin
APedido : = Buscar( ID) ;
if not Assigned( APedido) then
raise Exception. Create( Format( 'No se ha encontrado el pedido con ID = %d' , [ ID] ) ) ;
Result : = Eliminar( APedido) ;
APedido : = NIL ;
end ;
function TPedidosProveedorController. ElegirPedidos( APedido: IBizPedidoProveedor; AMensaje: String ; AMultiSelect: Boolean ) : IBizPedidoProveedor;
var
AEditor : IEditorElegirPedidosProveedor;
begin
Result : = NIL ;
2008-11-11 18:52:28 +00:00
CreateEditor( 'EditorElegirPedidosProveedor' , IEditorElegirPedidosProveedor, AEditor) ;
if Assigned( AEditor) then
2008-11-13 20:19:16 +00:00
try
AEditor. Controller : = Self;
AEditor. Pedidos : = APedido;
AEditor. MultiSelect : = AMultiSelect;
AEditor. Mensaje : = AMensaje;
if IsPositiveResult( AEditor. ShowModal) then
Result : = AEditor. PedidosProveedorSeleccionados;
finally
AEditor. Release;
AEditor : = NIL ;
end ;
2007-11-28 17:40:31 +00:00
end ;
function TPedidosProveedorController. Eliminar( APedido: IBizPedidoProveedor; AllItems: Boolean = false ) : Boolean ;
//En el caso de eliminar almenos un elemento del conjunto se devuelve true
var
bEliminado: Boolean ;
begin
bEliminado : = False ;
if not Assigned( APedido) then
raise Exception. Create ( 'APedido no asignado' ) ;
ShowHourglassCursor;
try
if not APedido. DataTable. Active then
APedido. DataTable. Active : = True ;
if ( APedido. State in dsEditModes) then
APedido. Cancel;
//Siempre eliminaremos el seleccionado
if EsEliminable( APedido) then
begin
2014-12-12 14:40:38 +00:00
//GESTION_DOCUMENTOS
FGestorDocumentosController. EliminarDirectorio( APedido. ID) ;
2007-11-28 17:40:31 +00:00
APedido. Delete;
bEliminado : = True ;
end ;
//En el caso de querer eliminar todos los items del objeto AAlbaran
if AllItems then
begin
with APedido. DataTable do
begin
First;
while not EOF do
begin
if EsEliminable( APedido) then
begin
2014-12-12 14:40:38 +00:00
//GESTION_DOCUMENTOS
FGestorDocumentosController. EliminarDirectorio( APedido. ID) ;
2007-11-28 17:40:31 +00:00
APedido. Delete;
bEliminado : = True
end
else Next;
end ;
end ;
end ;
if bEliminado then
begin
APedido. DataTable. ApplyUpdates;
Result : = True ;
end
else
Result : = False ;
finally
HideHourglassCursor;
end ;
end ;
2015-09-10 14:47:04 +00:00
procedure TPedidosProveedorController. EnviarPedidoPorEMail( APedido: IBizPedidoProveedor) ;
var
AReportController : IPedidosProveedorReportController;
AFicheroTMP : TFileName;
2022-02-09 15:00:16 +00:00
AsuntoEnvio : String ;
ACuerpoEnvio : String ;
2015-09-10 14:47:04 +00:00
AEMail : String ;
AListaEmail : TStringList;
begin
if not Assigned( APedido) then
raise Exception. Create ( 'Pedido no asignado (EnviarPedidoPorEMail)' ) ;
if APedido. DataTable. Active then
APedido. DataTable. Active : = True ;
AListaEmail : = TStringList. Create;
try
RecuperarProveedor( APedido) ;
APedido. Proveedor. DataTable. Active : = True ;
if not APedido. Proveedor. EMAIL_1IsNull then
AListaEmail. Add( APedido. Proveedor. EMAIL_1) ;
if not APedido. Proveedor. EMAIL_2IsNull then
AListaEmail. Add( APedido. Proveedor. EMAIL_2) ;
if not ElegirEMail( AListaEmail, AEMail) then
Exit;
finally
FreeANDNIL( AListaEmail) ;
end ;
ShowHourglassCursor;
2018-11-27 16:12:02 +00:00
// solicita por Jos<6F> Lu<4C> s que el asunto del correo y el documento adunto sean igual que la referencia del pedido impreso
2022-02-09 15:00:16 +00:00
AsuntoEnvio : = 'Pedido ref-' + Copy( APedido. REF_CON_CLIENTE, 8 , 6 ) + '-' + APedido. REF_VENDEDOR + '-' + Copy( APedido. NOMBRE_CLIENTE, 1 , 8 ) + '-' + APedido. DESCRIPCION_GENERAL;
ACuerpoEnvio : = 'Pedido ref-' + Copy( APedido. REF_CON_CLIENTE, 8 , 6 ) + '-' + APedido. REF_VENDEDOR + '-' + APedido. NOMBRE_CLIENTE + '-' + APedido. DESCRIPCION_GENERAL;
2018-11-27 16:12:02 +00:00
2022-02-09 15:00:16 +00:00
AFicheroTMP : = DarFicheroPDFTemporal( EscapeIllegalChars( AsuntoEnvio) ) ;
2015-09-10 14:47:04 +00:00
AReportController : = TPedidosProveedorReportController. Create;
try
AReportController. ExportToPDF( APedido. ID, AFicheroTMP) ;
2022-02-09 15:00:16 +00:00
SendMailMAPI( AsuntoEnvio, ACuerpoEnvio, AFicheroTMP, '' , '' , APedido. Proveedor. NOMBRE, AEMail) ;
2015-09-10 14:47:04 +00:00
finally
DeleteFile( AFicheroTMP) ;
AReportController : = NIL ;
HideHourglassCursor;
end ;
end ;
2007-11-28 17:40:31 +00:00
function TPedidosProveedorController. EsEliminable( APedido: IBizPedidoProveedor) : Boolean ;
begin
if not Assigned( APedido) then
raise Exception. Create ( 'Pedido no asignado: EsEliminable' ) ;
Result : = ( APedido. SITUACION = SITUACION_PEDIDO_PENDIENTE) ;
end ;
function TPedidosProveedorController. EsModificable( APedido: IBizPedidoProveedor) : Boolean ;
begin
if not Assigned( APedido) then
raise Exception. Create ( 'Pedido no asignado: EsModificable' ) ;
2022-02-09 15:00:16 +00:00
// Result := (APedido.SITUACION <> SITUACION_PEDIDO_RECIBIDO);
Result : = True ;
2007-11-28 17:40:31 +00:00
end ;
2008-03-06 20:35:50 +00:00
procedure TPedidosProveedorController. RecalcularImportes( APedido: IBizPedidoProveedor) ;
2007-11-28 17:40:31 +00:00
var
bEnEdicion : Boolean ;
2008-03-06 20:35:50 +00:00
ADetallePosAct : Integer ;
2007-11-28 17:40:31 +00:00
begin
if not Assigned( APedido) then
raise Exception. Create ( 'Pedido no asignado (RecalcularImportes)' ) ;
if APedido. DataTable. Active then
APedido. DataTable. Active : = True ;
2008-03-06 20:35:50 +00:00
{ Hay que guardar la posici<EFBFBD> n en la que estamos en los detalles por que
la asignaci<EFBFBD> n de valores a los campos IMPORTE_NETO e IMPORTE_PORTE
( ver m<EFBFBD> s adelante) colocan el puntero en la tabla detalle al principio.
No he encontrado la raz<EFBFBD> n por la que mueve el puntero. }
ADetallePosAct : = APedido. Detalles. POSICION;
2007-11-28 17:40:31 +00:00
bEnEdicion : = ( APedido. DataTable. State in dsEditModes) ;
if not bEnEdicion then
APedido. Edit;
ShowHourglassCursor;
APedido. Edit;
try
APedido. IMPORTE_NETO : = FDetallesController. DarTotalImporteTotal( APedido. Detalles) ;
APedido. IMPORTE_PORTE : = FDetallesController. DarTotalPorteTotal( APedido. Detalles) ;
if not bEnEdicion then
APedido. Post;
finally
HideHourglassCursor;
2008-03-06 20:35:50 +00:00
// Restaurar la posici<63> n que ten<65> amos en los detalles.
FDetallesController. LocalizarPosicion( APedido. Detalles, ADetallePosAct) ;
2007-11-28 17:40:31 +00:00
end ;
end ;
procedure TPedidosProveedorController. RecibirAviso( ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable) ;
var
APedido : IBizPedidoProveedor;
ADetalles : IBizDetallesPedidoProveedor;
begin
inherited ;
if Supports( ADataTable, IBizDetallesPedidoProveedor, ADetalles) and
Supports( ADetalles. DataTable. MasterSource. DataTable, IBizPedidoProveedor, APedido) then
begin
RecalcularImportes( APedido) ;
end ;
end ;
procedure TPedidosProveedorController. RecuperarObjetos( APedido: IBizPedidoProveedor) ;
begin
RecuperarProveedor( APedido) ;
end ;
procedure TPedidosProveedorController. RecuperarProveedor( APedido: IBizPedidoProveedor) ;
begin
APedido. _Proveedor : = ( FProveedorController. Buscar( APedido. ID_PROVEEDOR) as IBizProveedor) ;
end ;
function TPedidosProveedorController. Existe( const ID: Integer ) : Boolean ;
var
APedido : IBizPedidoProveedor;
begin
try
APedido : = Buscar( ID) ;
Result : = Assigned( APedido) and ( APedido. ID = ID) ;
finally
APedido : = NIL ;
end ;
end ;
function TPedidosProveedorController. ExtraerSeleccionados( APedido: IBizPedidoProveedor) : IBizPedidoProveedor;
var
ASeleccionados : IBizPedidoProveedor;
begin
ASeleccionados : = ( Self. Buscar( ID_NULO) as IBizPedidoProveedor) ;
2008-08-05 15:05:15 +00:00
CopyDataTableDA5( APedido. DataTable, ASeleccionados. DataTable, True ) ;
2007-11-28 17:40:31 +00:00
Result : = ASeleccionados;
end ;
2022-02-09 15:00:16 +00:00
procedure TPedidosProveedorController. FiltrarAno( APedido: IBizPedidoProveedor; ADynWhereDataTable: WideString ; const Ano: String ) ;
var
Condicion: TDAWhereExpression;
FechaIni: String ;
FechaFin: String ;
begin
APedido. DataTable. DynamicWhere. Clear;
APedido. DataTable. DynamicWhere. Xml : = ADynWhereDataTable;
if ( Ano < > 'Todos' ) then
begin
// Filtrar las facturas actuales por empresa
FechaIni : = '01/01/' + Ano;
FechaFin : = '31/12/' + Ano;
with APedido. DataTable. DynamicWhere do
begin
// (FECHA_INICIO between FECHA_FIN)
Condicion : = NewBinaryExpression( NewField( '' , fld_PedidosProveedorFECHA_PEDIDO) , NewConstant( FechaIni, datString) , dboGreaterOrEqual) ;
Condicion : = NewBinaryExpression( NewBinaryExpression( NewField( '' , fld_PedidosProveedorFECHA_PEDIDO) , NewConstant( FechaFin, datString) , dboLessOrEqual) , Condicion, dboAnd) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Condicion, Expression, dboAnd) ;
end ;
end ;
end ;
2007-11-28 17:40:31 +00:00
procedure TPedidosProveedorController. FiltrarEmpresa( APedido: IBizPedidoProveedor) ;
var
Condicion: TDAWhereExpression;
begin
if APedido. DataTable. Active then
APedido. DataTable. Active : = False ;
// Filtrar los pedidos actuales por empresa
with APedido. DataTable. DynamicWhere do
begin
// (ID_EMPRESA >= ID)
Condicion : = NewBinaryExpression( NewField( '' , fld_PedidosProveedorID_EMPRESA) , NewConstant( AppFactuGES. EmpresaActiva. ID, datInteger) , dboEqual) ;
if IsEmpty then
Expression : = Condicion
else
Expression : = NewBinaryExpression( Expression, Condicion, dboAnd) ;
end ;
end ;
procedure TPedidosProveedorController. SetProveedorController( const Value: IProveedoresController) ;
begin
FProveedorController : = Value;
end ;
procedure TPedidosProveedorController. SetDetallesController( const Value: IDetallesPedidoProveedorController) ;
begin
FDetallesController : = Value;
end ;
2014-12-12 14:40:38 +00:00
procedure TPedidosProveedorController. SetGestorDocumentosController( const Value: IGestorDocumentosController) ;
begin
FGestorDocumentosController : = Value;
end ;
2007-11-28 17:40:31 +00:00
function TPedidosProveedorController. Guardar( APedido: IBizPedidoProveedor) : Boolean ;
var
IDNuevo : Integer ;
begin
Result : = False ;
if not Assigned( APedido) then
raise Exception. Create ( 'Pedido no asignada' ) ;
if not Assigned( FDetallesController) then
raise Exception. Create ( 'Controller detalles no asignado' ) ;
if ValidarPedido( APedido) then
begin
ShowHourglassCursor;
// Asegurarnos de que todos los importes est<73> n bien.
RecalcularImportes( APedido) ;
try
APedido. DataTable. ApplyUpdates;
2019-03-19 16:34:55 +00:00
2007-11-28 17:40:31 +00:00
Result : = True ;
finally
HideHourglassCursor;
end ;
end ;
end ;
function TPedidosProveedorController. Nuevo: IBizPedidoProveedor;
var
APedido : IBizPedidoProveedor;
begin
APedido : = FDataModule. NewItem;
FiltrarEmpresa( APedido) ;
APedido. DataTable. Active : = True ;
APedido. Insert;
Result : = APedido;
end ;
procedure TPedidosProveedorController. Preview( APedido: IBizPedidoProveedor; AllItems: Boolean = false ) ;
var
AReportController : IPedidosProveedorReportController;
ID_Pedidos: TStringList;
begin
AReportController : = TPedidosProveedorReportController. Create;
try
ID_Pedidos : = TStringList. Create;
//Si deseamos previsualizar todos los items del objeto albaran
if AllItems then
begin
with APedido. DataTable do
begin
First;
while not EOF do
begin
ID_Pedidos. Add( IntToStr( APedido. ID) ) ;
Next;
end ;
end ;
end
//Solo previsualizamos el item seleccionado
else
ID_Pedidos. Add( IntToStr( APedido. ID) ) ;
AReportController. Preview( ID_Pedidos. CommaText) ;
finally
AReportController : = NIL ;
ID_Pedidos. Free;
end ;
end ;
procedure TPedidosProveedorController. Print( APedido: IBizPedidoProveedor; AllItems: Boolean = false ) ;
var
AReportController : IPedidosProveedorReportController;
ID_Pedidos: TStringList;
begin
AReportController : = TPedidosProveedorReportController. Create;
try
ID_Pedidos : = TStringList. Create;
//Si deseamos previsualizar todos los items del objeto albaran
if AllItems then
begin
with APedido. DataTable do
begin
First;
while not EOF do
begin
ID_Pedidos. Add( IntToStr( APedido. ID) ) ;
Next;
end ;
end ;
end
//Solo previsualizamos el item seleccionado
else
ID_Pedidos. Add( IntToStr( APedido. ID) ) ;
AReportController. Print( ID_Pedidos. CommaText) ;
finally
AReportController : = NIL ;
ID_Pedidos. Free;
end ;
end ;
function TPedidosProveedorController. GetProveedorController: IProveedoresController;
begin
Result : = FProveedorController;
end ;
function TPedidosProveedorController. GetDetallesController: IDetallesPedidoProveedorController;
begin
Result : = FDetallesController;
end ;
2014-12-12 14:40:38 +00:00
function TPedidosProveedorController. GetGestorDocumentosController: IGestorDocumentosController;
begin
Result : = FGestorDocumentosController;
end ;
2007-11-28 17:40:31 +00:00
end .