Cree la pantalla de gestiĆ³n Productos
Cree la pantalla de gestión Productos
La siguiente pantalla a crear será Productos, esta pantalla, al igual que domicilios, aparecerá como una pestaña dentro de la sub-pantalla GESTION DEFAULT (punto comprendido dentro del curso "Tu primer CRM"). El objetivo de este ejercicio es comprender cómo utilizar la entidad de producto en las gestiones. Esta pantalla nos dará como resultado una grilla donde se darán de alta los pedidos de productos comercializados asociándolo a una gestión de contacto. También aprenderemos a vincularlo con la entidad que maneja stock de sucursales (ENTIDAD_2).
Comencemos
Ingresar al punto de menú "Configuración CRM > Pantallas & Grillas > Pantallas", posicionarse sobre el registro "Gestión Default" , presionar el botón "Subpantalla" y agregar un nuevo registro
Se abrirá un pop-up solicitando la descripción, Tipo y Perfiles. Completar con la siguiente información:
- Descripción: PRODUCTO
- Tipo: Productos
- Perfiles: Seleccionar todos
Posicionarse sobre el registro " PRODUCTO" y presionar el botón "Diseño". Cuando se abra una pantalla pop-up seleccionar "Editar diseño de pantalla” y presionar aceptar.
Ampliar el marco de trabajo de la misma manera que como se ha explicado en la creación de pantalla "DOMICILIOS".
Agregar los siguientes controles a la pantalla, agregar etiquetas (label) para poner el nombre del campo y ubicarlas al costado de cada control y ordenarlos. Finalmente presionar guardar.
DATOS | Alcance |
---|---|
Domicilio envio Producto | PRODUCTO |
Cantidad Producto | PRODUCTO |
Codigo Producto | PRODUCTO |
SubTotal Producto | PRODUCTO |
Finalizada la carga, nos quedará una pantalla como se puede apreciar.
Ahora, sin salir de la pantalla, Para agregar una grilla deberá, dentro del panel superior presionar “Grid” (PASO 1) y luego clickear en la pantalla (PASO 2). Ubicar la grilla en la posición deseada. Luego presionar el botón “Columnas” posicionado sobre el panel derecho (PASO 3) y completar con los siguientes valores otorgados a continuación.
Nombre Columna | Descripción | Alineación | Ancho |
---|---|---|---|
CODIGOSUCURSAL | Código Sucursal | Left | 90 |
DESCRIPCION | Descripción | Left | 160 |
DIRECCION | Dirección | Left | 240 |
STOCK | Stock | Left | 90 |
Dentro del panel derecho, donde indica Id, cambiar el nombre por "grdGrillaSucProd". Esto se utiliza para utilizar nomenclaturas fáciles, y luego al momento de referenciarlo tenerlo más presente.
Sin cerrar el editor de pantallas, ingresar por medio del menú laterla izquierdo a "Configuración CRM - Operaciones & Reportes - Datasource" y crear el siguiente SP:
--DESCRIPCIÓN: CODIGOPRODUCTO--
--SELECT QUE ME TRAE SUCURSAL, DESCRIPCION, DIRECCION Y CANTIDAD DE UNIDADES EN STOCK PARA EL PRODUCTO INDICADO (IDPRODUCTO)--
(@CODIGOPRODUCTO varchar(10))
AS
select a.TXTCODIGOSUCURSALENT2 as 'CODIGOSUCURSAL',
p.DESCRIPCION as 'DESCRIPCION',
a.TXTDIRECCIONENT2 as 'DIRECCION',
a.INTSTOCKPRODUCTOENT2 as 'STOCK'
from TABLA_2 a(nolock)
inner join dbo.PRODUCTOS p(nolock)
on p.CODIGO = a.TXTCODIGOPRODUCTOENT2
where a.TXTCODIGOPRODUCTOENT2 = @CODIGOPRODUCTO
and a.INTSTOCKPRODUCTOENT2 >= 1
--go
Al aceptar la carga del proceso, recordar el ID de registro.
Volver al diseñador de pantalla, presionar el marco y luego abrir el "On PoupLoad", (reemplazar XXXX por el ID del Datasource creado):
Ingresar el código JavaScript
/* CARGA GRILLA PRODUCTO- CAPTURAMOS EL CÓDIGO DEL PRODUTO DESDE EL REGISTRO ACTIVO DE LA GRILLA Y EJECUTAMOS EL STORE*/
var CODIGOPRODUCTO = pantalla.findControl("dgdPRODUCTOS").getActiveRow().getValue("CODIGO");
var SP = ExecuteDataTable("__XXXX",CODIGOPRODUCTO)
pantalla.findControl("grdGrillaSucProd").fill(SP);
Llenar campo Domicilio Envio producto, que son los TIPOS de domicilios creados asociados a la persona. Para esto nos debemos posicionar en el marco y luego presionar "On PoupLoad", e ingresar el siguiente JavaScript:
/* CONSIGO LOS TIPOS DE DOMICILIOS CARGADOS PARA EL USUARIO. DEBIDO A QUE LOS REGISTROS CARGADOS EN ESTA GESTION NO SE ENCUENTRA IMPACTADO EN BBDD (HASTA NO PRESIONAR ACEPTAR) DEBEREMOS BARRER LA GRILLA DETALLE1 CAPTURANDO TODOS LOS ROW Y SU CORRESPONDIENTE TIPODIRECCION */
var COUNT = pantalla.findControl("dgdDETALLE_1").Rows.count();
debugger;
for ( i = 0 ; i < COUNT ; i ++ )
{
var tipodireccion = pantalla.findControl("dgdDETALLE_1").Rows.getRow(i).getValue("txtTipoDet1");
pantalla.findControl("lstDomicilioenvioProducto").setNewOption(tipodireccion);
}
Llenar campo Código Producto con el código del registro seleccionado. Para esto nos debemos posicionar en el marco y luego presionar "On PoupLoad", e ingresar el siguiente JavaScript:
/*CODIGO PRODUCTO - RECARGA DE CAMPO*/
pantalla.findControl("txtCodigoProducto").setValue(CODIGOPRODUCTO);
Llenar campo Sub-total producto, que es el resultado de la cantidad de productos por el producto seleccionado. Para esto nos debemos agregar un botón con la leyenda "Calcular" posicionar en el y luego presionar "On Click", e ingresar el siguiente JavaScript:
/* CONSIGO LOS VALORES DE LAS CANTIDADES DE PRODUCTOS SOLICITADOS Y EL PRECIO DE ESTE */
var CANT = pantalla.findControl("intCantidadProducto").getValue();
var TOTAL = pantalla.findControl("dgdPRODUCTOS").getActiveRow().getValue("PRECIO");
/* MULTIPLICO LAS VARIABLES PARA CALCULAR EL SUB-TOTAL DEL PRODUCTO */
pantalla.findControl("txtSubTotalProducto").setValue(TOTAL * CANT);
Actualizo el stock dentro de la tabla entidad 2. Para ello agregaré un datasource (dentro de "Configuración CRM - Operaciones & Reportes - Datasource") que luego será instanciado desde la pantalla por medio de JavaScript. Es importante recordar el número de Store para reutilizarlo más adelante, cuando se lo deba llamar.
--ACTUALIZOSTOCK--
(@CANT int, @CODPRODUCTO varchar(40),@CODSUC varchar(50))
AS
update TABLA_2 set intStockProductoEnt2 = intStockProductoEnt2 - @CANT
where txtCodigoSucursalEnt2 = @CODSUC
and txtCodigoProductoEnt2 = @CODPRODUCTO
Agrego validación para que cuando se acepte esta operación consulte si existe stock de productos en la sucursal designada y también se actualicen los Stock restándole la cantidad solicitada (Recordar que este es un ejemplo en Demo para aprender a utilizar todas las funcionalidades). Para esto, nos debemos posicionar sobre el marco de la pantalla y presionar el botón "On PoupUnLoad" ubicado en el panel izquierdo. Luego ingresar el siguiente JavaScript:
/* RESCATO LA SUCURSAL SELECCIONADA EN LA GRILLA, EL CODIGO DE PRODUCTO Y LA SUCURSAL */
var SUC = pantalla.findControl("grdGrillaSucProd").hasActiveRow();
var CODPRODUCTO = pantalla.findControl("dgdPRODUCTOS").getActiveRow().getValue("CODIGO");
var CODSUC = pantalla.findControl("grdGrillaSucProd").getActiveRow().getValue("CODIGOSUCURSAL");
/* CONSULTO SI HAY ALGUN REGISTRO DE LA GRILLA SELECCIONADA */
if (SUC == true)
{
/* CONSIGO EL STOCK DE LA GRILLA, LA CANTIDAD DE PRODUCTOS SOLICITADOS Y EL PRECIO DE ESTOS */
var STOCK = pantalla.findControl("grdGrillaSucProd").getActiveRow().getValue("STOCK");
var CANT = pantalla.findControl("intCantidadProducto").getValue();
var TOTAL = pantalla.findControl("dgdPRODUCTOS").getActiveRow().getValue("PRECIO");
/* MULTIPLICO LA CANTIDAD POR PRECIO PARA CONSEGUIR EL SUB-TOTAL */
pantalla.findControl("txtSubTotalProducto").setValue(TOTAL * CANT);
/* SI EL STOCK ES MENOR QUE LA CANTIDAD SOLICITADA, ME ARROJA UNA ALERTA */
if (parseInt(STOCK) < parseInt(CANT))
{
alert("El stock disponible en la sucursal es inferior al que se esta intentando vender.");
return false;
}else
/* EJECUTO EL STORE PREVIAMENTE GENERADO PARA ACTUALIZAR EL STOCK EN LA ENTIDAD DE SUCURSALES */
{
ExecuteScalar("__XXXX",CANT,CODPRODUCTO,CODSUC);
}
}else
{
/* SI NO SE SELECCIONA UNA SUCURSAL, ME ARROJA UNA ALERTA */
alert("Debe seleccionar la sucursal en la que se retirara el equipo.");
return false;
}
Guardar la pantalla editada, volver a posicionarse sobre el registro " PRODUCTO" y presionar Diseño. Cuando se abra una pantalla pop-up seleccionar "Editar diseño de grilla" y presionar aceptar.
Agregar los controles y asociarles una descripción. Este paso permitirá editar la grilla que se verá dentro de la pestaña de gestión Finalmente presionar salir.
NOMBRE COLUMNA | DESCRIPCION | ALINEACION | ANCHO |
---|---|---|---|
FAMILIA_DESC | FAMILIA | Left | 120 |
PRODUCTO_DESC | PRODUCTO | Left | 320 |
CODIGO | CODIGO INTERNO | Left | 70 |
PRECIO | PRECIO PRODUCTO | Left | 70 |
txtCodigoProducto | CODIGO PRODUCTO | Left | 90 |
txtDescripcionProducto | DESCRIPCION PRODUCTO | Left | 100 |
lstDomicilioenvioProducto | DOMICILIO ENVIO | Left | 100 |
intCantidadProducto | CANTIDAD | Left | 80 |
txtSubTotalProducto | SUBTOTAL | Left | 80 |
Es importante comprender que los registros COGIDO y PRECIO esten dentro de las grillas y con sus respectivos valores, siendo qeu al consultar por JS en ciertos procesos dados de alta, si no fueron cargados no conseguira la columna para hacerse del valor.
Guardar la grilla editada e ingresar a "Configuración CRM > Pantallas & Grillas > Grillas & Vistas > Grillas", posicionarse sobre el registro "Seleccion de productos a vender" y presionar el botón columnas. Agregar las siguientes columnas. Esto permitirá editar la grilla pop-up cuando se agrega un producto. Es indispensable cargar en esta grilla tambien aquellos campos que serán consultados desde la grilla por medio de código JS.
NOMBRE COLUMNA | DESCRIPCION | ALINEACION | ANCHO |
---|---|---|---|
CODIGO | Código | Left | 70 |
IDPRODUCTO | ID Producto | Left | 70 |
PRECIO | Precio | Left | 70 |
PRODUCTO_DESC | Descripción | Left | 320 |