2013-04-25 17:15:39 +00:00
unit uGenerarAlbaranesCliUtils;
interface
uses
Windows, SysUtils, Classes, pngimage, JSDialog,
uBizContratosCliente, uBizAlbaranesCliente;
type
TdmGenerarAlbaranesCli = class( TDataModule)
JsListaAlbaranesGenerados: TJSDialog;
end ;
function GenerarAlbaranCli( const IDContrato : Integer ) : Boolean ; overload ;
function GenerarAlbaranCli( AContrato : IBizContratoCliente; var AAlbaran: IBizAlbaranCliente) : Boolean ; overload ;
// function ElegirPedidoYGenerarAlbaranCli(var IDAlbaran: Integer) : Boolean;
implementation
{$R *.dfm}
uses
2013-06-19 09:44:10 +00:00
uFactuGES_App, uDialogUtils, uBizDetallesContratoCliente, uBizDetallesAlbaranCliente,
2013-04-25 17:15:39 +00:00
uContratosClienteController, uAlbaranesClienteController, uClientesController,
uDetallesAlbaranClienteController, uControllerDetallesBase,
uBizContactos, schContratosClienteClient_Intf,
schAlbaranesClienteClient_Intf;
var
dmGenerarAlbaranesCli: TdmGenerarAlbaranesCli;
AContratosClienteController : IContratosClienteController;
AAlbaranesClienteController : IAlbaranesClienteController;
ADetallesAlbaranesCliController : IDetallesAlbaranClienteController;
AClientesController : IClientesController;
{ M<> todos auxiliares }
procedure CopiarContratoAAlbaran( AContrato: IBizContratoCliente;
AAlbaran : IBizAlbaranCliente) ;
begin
if not Assigned( AAlbaran) then
raise Exception. Create ( 'Albar<61> n no asignado (CopiarContratoAAlbaran)' ) ;
if not Assigned( AContrato) then
raise Exception. Create ( 'Pedido no asignado (CopiarContratoAAlbaran)' ) ;
if not AContrato. DataTable. Active then
AContrato. DataTable. Active : = True ;
// El albar<61> n tiene que venir ya abierto y posicionado donde hay que copiar
AAlbaran. ID_CLIENTE : = AContrato. ID_CLIENTE;
AAlbaran. ID_PEDIDO : = AContrato. ID;
AAlbaran. CALLE : = AContrato. CALLE;
AAlbaran. CODIGO_POSTAL : = AContrato. CODIGO_POSTAL;
AAlbaran. POBLACION : = AContrato. POBLACION;
AAlbaran. PROVINCIA : = AContrato. PROVINCIA;
AAlbaran. PERSONA_CONTACTO : = AContrato. PERSONA_CONTACTO;
AAlbaran. TELEFONO : = AContrato. TELEFONO;
AAlbaran. MOVIL : = AContrato. MOVIL;
AAlbaran. IMPORTE_NETO : = AContrato. IMPORTE_NETO;
AAlbaran. IMPORTE_PORTE : = AContrato. IMPORTE_PORTE;
AAlbaran. DESCUENTO : = AContrato. DESCUENTO;
AAlbaran. IMPORTE_DESCUENTO : = AContrato. IMPORTE_DESCUENTO;
AAlbaran. BASE_IMPONIBLE : = AContrato. BASE_IMPONIBLE;
AAlbaran. IVA : = AContrato. IVA;
AAlbaran. IMPORTE_IVA : = AContrato. IMPORTE_IVA;
AAlbaran. IMPORTE_TOTAL : = AContrato. IMPORTE_TOTAL;
AAlbaran. DataTable. FieldByName( fld_AlbaranesClienteOBSERVACIONES) . AsVariant : = AContrato. DataTable. FieldByName( fld_ContratosClienteOBSERVACIONES) . AsVariant;
AAlbaran. ID_FORMA_PAGO : = AContrato. ID_FORMA_PAGO;
2013-05-18 15:22:15 +00:00
AAlbaran. REFERENCIA_CLIENTE : = AContrato. REFERENCIA_CLIENTE;
2013-04-25 17:15:39 +00:00
end ;
procedure CopiarDetallesAAlbaran(
AContrato: IBizContratoCliente;
AAlbaran: IBizAlbaranCliente;
AArticulos: IBizDetallesContratoCliente) ;
var
i : integer ;
ADetalles : IBizDetallesAlbaranCliente;
ADetallesController : IDetallesAlbaranClienteController;
begin
if not Assigned( AAlbaran) then
raise Exception. Create ( 'Albaran no asignado(CopiarDetallesAAlbaran)' ) ;
if not Assigned( AContrato) then
raise Exception. Create ( 'Contrato no asignado (CopiarDetallesAAlbaran)' ) ;
if not Assigned( AArticulos) then
raise Exception. Create ( 'Art<72> culos no asignado (CopiarDetallesAAlbaran)' ) ;
if not AArticulos. DataTable. Active then
AArticulos. DataTable. Active : = True ;
// El contrato tiene que venir ya abierto y posicionado donde hay que copiar
ADetalles : = AAlbaran. Detalles;
ADetallesController : = TDetallesAlbaranClienteController. Create;
try
//OJO IMPORTANTE
//Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para
//obligarle siempre a recalcular los detalles una sola vez
ADetallesController. BeginUpdate( ADetalles) ;
AArticulos. DataTable. First;
for i : = 0 to AArticulos. DataTable. RecordCount - 1 do
begin
ADetallesController. Add( ADetalles, AArticulos. TIPO_DETALLE) ;
ADetalles. Edit;
ADetalles. REFERENCIA : = AArticulos. REFERENCIA;
ADetalles. ID_ARTICULO : = AArticulos. ID_ARTICULO;
if ( AArticulos. PROPIEDAD < > '' ) then
2013-04-26 12:34:42 +00:00
ADetalles. CONCEPTO : = AArticulos. PROPIEDAD + ' ' + AArticulos. CONCEPTO
2013-04-25 17:15:39 +00:00
else
ADetalles. CONCEPTO : = AArticulos. CONCEPTO;
if not AArticulos. CANTIDADIsNull then
ADetalles. CANTIDAD : = AArticulos. CANTIDAD;
if not AArticulos. IMPORTE_UNIDADIsNull then
ADetalles. IMPORTE_UNIDAD : = AArticulos. IMPORTE_UNIDAD;
if not AArticulos. IMPORTE_TOTALIsNull then
ADetalles. IMPORTE_TOTAL : = AArticulos. IMPORTE_TOTAL;
if not AArticulos. DESCUENTOIsNull then
ADetalles. DESCUENTO : = AArticulos. DESCUENTO;
if not AArticulos. IMPORTE_PORTEIsNull then
ADetalles. IMPORTE_PORTE : = AArticulos. IMPORTE_PORTE;
ADetalles. VISIBLE : = AArticulos. VISIBLE;
ADetalles. REFERENCIA_PROVEEDOR : = AArticulos. REFERENCIA_PROVEEDOR;
ADetalles. Post;
AArticulos. Next;
end ;
finally
ADetallesController. EndUpdate( ADetalles) ;
ADetallesController : = NIL ;
end ;
end ;
procedure Inicializar;
begin
dmGenerarAlbaranesCli : = TdmGenerarAlbaranesCli. Create( nil ) ;
AContratosClienteController : = TContratosClienteController. Create;
AAlbaranesClienteController : = TAlbaranesClienteController. Create;
ADetallesAlbaranesCliController : = TDetallesAlbaranClienteController. Create;
AClientesController : = TClientesController. Create;
end ;
procedure Finalizar;
begin
FreeAndNIL( dmGenerarAlbaranesCli) ;
AContratosClienteController : = nil ;
AAlbaranesClienteController : = nil ;
ADetallesAlbaranesCliController : = nil ;
AClientesController : = nil ;
end ;
function GenerarAlbaranCli( const IDContrato : Integer ) : Boolean ; overload ;
var
Acontrato : IBizContratoCliente;
AAlbaran : IBizAlbaranCliente;
begin
Result : = False ;
try
if not Assigned( AContratosClienteController) then
Inicializar;
Acontrato : = AContratosClienteController. Buscar( IDContrato) ;
if Assigned( Acontrato) then
Result : = GenerarAlbaranCli( Acontrato, AAlbaran) ;
finally
if Assigned( AContratosClienteController) then
Finalizar;
end ;
end ;
function GenerarAlbaranCli( AContrato : IBizContratoCliente; var AAlbaran: IBizAlbaranCliente) : Boolean ; overload ;
var
ARespuesta : Integer ;
AuxAlbaran : IBizAlbaranCliente;
// AArticulosPendientes: IBizPedidoClienteArticulosPend;
begin
Result : = False ;
AAlbaran : = NIL ;
if not Assigned( AContrato) then
raise Exception. Create( 'Pedido de cliente no asignado (GenerarAlbaranCli)' ) ;
if not AContrato. DataTable. Active then
AContrato. DataTable. Active : = True ;
if not Assigned( AContratosClienteController) then
Inicializar;
try
{
AArticulosPendientes : = APedidosClienteController. ArticulosPendientes( APedido. ID) ;
if not Assigned( AArticulosPendientes) then
raise Exception. Create( 'Error al recuperar los art<72> culos sin albar<61> n del pedido (GenerarAlbaranCli)' ) ;
AArticulosPendientes. DataTable. Active : = True ;
if AArticulosPendientes. DataTable. RecordCount = 0 then
begin
ShowWarningMessage( 'Generar albar<61> n a partir del pedido' , 'Todos los art<72> culos de este pedido ya figuran en uno o m<> s albaranes de cliente. Por lo que no se pueden generar nuevos albaranes para este pedido' ) ;
Exit; // Aunque es un exit, se ejecuta la parte del finally antes de salir.
end ;
}
AuxAlbaran : = AAlbaranesClienteController. Nuevo;
2013-06-19 09:44:10 +00:00
AuxAlbaran. ID_EMPRESA : = AppFactuGES. EmpresaActiva. ID;
AuxAlbaran. ID_TIENDA : = AppFactuGES. TiendaActiva. ID;
AuxAlbaran. TIENDA : = AppFactuGES. TiendaActiva. NOMBRE;
2013-04-25 17:15:39 +00:00
CopiarContratoAAlbaran( AContrato, AuxAlbaran) ;
CopiarDetallesAAlbaran( AContrato, AuxAlbaran, AContrato. Detalles) ;
//Sustituir por if de guardar
if AAlbaranesClienteController. Guardar( AuxAlbaran) then
begin
AAlbaran : = AuxAlbaran;
with dmGenerarAlbaranesCli. JsListaAlbaranesGenerados do
begin
Instruction. Text : = 'Se ha generado el albar<61> n' ;
Content. Clear;
Content. Add( Format( 'Se ha generado correctamente el albar<61> n %s a partir del pedido de cliente' + #10 #13 , [ AuxAlbaran. REFERENCIA] ) ) ;
Execute;
ARespuesta : = CustomButtonResult;
case ARespuesta of
1 0 0 : begin
// Ver el albar<61> n
AAlbaranesClienteController. Ver( AuxAlbaran) ;
end ;
2 0 0 : // Continuar;
end ;
end ;
end ;
Result : = True ;
finally
// AArticulosPendientes := NIL;
if Assigned( AContratosClienteController) then
Finalizar;
end ;
end ;
{
function ElegirPedidoYGenerarAlbaranCli( var IDAlbaran: Integer ) : Boolean ; overload ;
var
APedido : IBizPedidoCliente;
AAlbaran : IBizAlbaranCliente;
begin
Result : = False ;
IDAlbaran : = - 1 ;
AAlbaran : = NIL ;
try
if not Assigned( APedidosClienteController) then
Inicializar;
APedido : = APedidosClienteController. ElegirPedidos( APedidosClienteController. BuscarPendientes,
'Elija el pedido de cliente que desea utilizar para dar de alta el albar<61> n de cliente.'
, False ) ;
if Assigned( APedido) then
begin
Result : = GenerarAlbaranCli( APedido, AAlbaran) ;
if Result then
IDAlbaran : = AAlbaran. ID;
end ;
finally
if Assigned( APedidosClienteController) then
Finalizar;
end ;
end ;
}
end .