public Operacion EliminarProductoDelCombo(SkuPorCombo skuPorCombo)
        {
            BaseDeDatosServicio.BeginTransaction();
            try
            {
                DbParameter[] parameters =
                {
                    new OAParameter
                    {
                        ParameterName = "@COMBO_ID",
                        Value         = skuPorCombo.COMBO_ID
                    }
                    , new OAParameter
                    {
                        ParameterName = "@CODE_SKU",
                        Value         = skuPorCombo.CODE_SKU
                    }
                    , new OAParameter
                    {
                        ParameterName = "@PACK_UNIT",
                        Value         = skuPorCombo.PACK_UNIT
                    }
                };

                var op = BaseDeDatosServicio.ExecuteQuery <Operacion>("SWIFT_SP_DELETE_SKU_BY_COMBO", CommandType.StoredProcedure, false, parameters)[0];
                if (op.Resultado == ResultadoOperacionTipo.Error)
                {
                    BaseDeDatosServicio.Rollback();
                }
                else
                {
                    BaseDeDatosServicio.Commit();
                }
                return(op);
            }
            catch (DbException e)
            {
                BaseDeDatosServicio.Rollback();
                return(new Operacion
                {
                    Codigo = e.ErrorCode,
                    Mensaje = e.Message,
                    Resultado = ResultadoOperacionTipo.Error
                });
            }
            catch (Exception ex)
            {
                BaseDeDatosServicio.Rollback();
                return(new Operacion
                {
                    Codigo = -1,
                    Mensaje = ex.Message,
                    Resultado = ResultadoOperacionTipo.Error
                });
            }
        }
        public void AgregarSkusCombo(object sender)
        {
            var idCombo  = Int32.Parse(UiTxtCodigo.Text);
            var cantidad = Int32.Parse(UiTxtCantidadSku.Text);

            if (cantidad < 0)
            {
                EstablecerError("La cantidad debe de ser mayor a 0.", UiVistaCombos);
                return;
            }

            var listaSkusAAsociar = UiListaSku.GridView.GetSelectedFieldValues("CODE_SKU", "PACK_UNIT");

            if (listaSkusAAsociar.Count > 0)
            {
                List <SkuPorCombo> listaSkuPorCombos = new List <SkuPorCombo>();

                foreach (var sku in listaSkusAAsociar)
                {
                    var skuPorCombo = new SkuPorCombo
                    {
                        COMBO_ID = idCombo
                        ,
                        CODE_SKU = ((object[])sku)[0].ToString()
                        ,
                        PACK_UNIT = int.Parse(((object[])sku)[1].ToString())
                        ,
                        QTY = cantidad
                    };

                    listaSkuPorCombos.Add(skuPorCombo);

                    skuPorCombo = null;
                }

                UsuarioDeseaAgregarProductoAlCombo?.Invoke(sender, new ComboArgumento
                {
                    Combo = new Combo
                    {
                        COMBO_ID = idCombo
                        ,
                        SkusPorCombo = listaSkuPorCombos
                    }
                });
            }
        }
        public void AgregarSkusNuevoCombo(object sender)
        {
            var cantidad = Int32.Parse(UiTxtCantidadSku.Text);

            if (cantidad < 0)
            {
                EstablecerError("La cantidad debe de ser mayor a 0.", UiVistaCombos);
                return;
            }

            var listaSkusAAsociar = UiListaSku.GridView.GetSelectedFieldValues("CODE_SKU", "PACK_UNIT", "DESCRIPTION_SKU", "CODE_PACK_UNIT",
                                                                               "DESCRIPTION_PACK_UNIT", "FAMILY_SKU", "CODE_FAMILY_SKU", "DESCRIPTION_FAMILY_SKU", "ID");

            var listaSkuPorCombos = new List <SkuPorCombo>();

            if (ProductosDeCombo == null)
            {
                var comboArgumento = new ComboArgumento
                {
                    Combo = new Combo
                    {
                        COMBO_ID = null
                    }
                };
                UsuarioSeleccionoCombo?.Invoke(sender, comboArgumento);
            }
            else
            {
                listaSkuPorCombos = ProductosDeCombo.ToList();
            }

            if (listaSkusAAsociar.Count > 0)
            {
                foreach (var sku in listaSkusAAsociar)
                {
                    int?   famSku  = null;
                    string famCode = null;
                    string descFam = null;

                    if (((object[])sku)[5] != null)
                    {
                        famSku  = int.Parse(((object[])sku)[5].ToString());
                        famCode = ((object[])sku)[6].ToString();
                        descFam = ((object[])sku)[7].ToString();
                    }

                    var skuPorCombo = new SkuPorCombo
                    {
                        COMBO_ID = 0
                        ,
                        CODE_SKU = ((object[])sku)[0].ToString()
                        ,
                        PACK_UNIT = int.Parse(((object[])sku)[1].ToString())
                        ,
                        QTY = cantidad
                        ,
                        DESCRIPTION_SKU = ((object[])sku)[2].ToString()
                        ,
                        CODE_PACK_UNIT = ((object[])sku)[3].ToString()
                        ,
                        DESCRIPTION_PACK_UNIT = ((object[])sku)[4].ToString()
                        ,
                        FAMILY_SKU = famSku
                        ,
                        CODE_FAMILY_SKU = famCode
                        ,
                        DESCRIPTION_FAMILY_SKU = descFam
                        ,
                        ID = int.Parse(((object[])sku)[8].ToString())
                    };

                    listaSkuPorCombos.Add(skuPorCombo);
                    skuPorCombo = null;
                }
            }

            ProductosDeCombo = listaSkuPorCombos;



            var res =
                ProductosNoAsociadosAlCombo.Where(
                    s => ProductosDeCombo.All(s2 => s2.ID != s.ID)).ToList();

            ProductosNoAsociadosAlCombo = res;
        }
        protected void UiVistaSkusCombo_OnBatchUpdate(object sender, ASPxDataBatchUpdateEventArgs e)
        {
            var idCombo = 0;

            if (UiTxtCodigo.Text != "")
            {
                idCombo = int.Parse(UiTxtCodigo.Text);
            }



            if (idCombo != 0)
            {
                var listaSkuPorCombos          = new List <SkuPorCombo>();
                var listaSkuPorComboEliminados = new List <SkuPorCombo>();

                foreach (var item in e.UpdateValues)
                {
                    var skuPorCombo = new SkuPorCombo
                    {
                        COMBO_ID = idCombo
                        ,
                        CODE_SKU = item.Keys["CODE_SKU"].ToString()
                        ,
                        PACK_UNIT = int.Parse(item.Keys["PACK_UNIT"].ToString())
                        ,
                        QTY = int.Parse(item.NewValues["QTY"].ToString())
                    };
                    listaSkuPorCombos.Add(skuPorCombo);
                    skuPorCombo = null;
                }

                if (listaSkuPorCombos.Count > 0)
                {
                    UsuarioDeseaActualizarProductoDelCombo?.Invoke(sender, new ComboArgumento
                    {
                        Combo = new Combo
                        {
                            COMBO_ID = idCombo
                        }
                        ,
                        ProductosDeComboQueCambiaron = listaSkuPorCombos
                    });
                }


                foreach (var item in e.DeleteValues)
                {
                    var skuPorCombo = new SkuPorCombo
                    {
                        COMBO_ID = idCombo
                        ,
                        CODE_SKU = item.Keys["CODE_SKU"].ToString()
                        ,
                        PACK_UNIT = int.Parse(item.Keys["PACK_UNIT"].ToString())
                    };

                    listaSkuPorComboEliminados.Add(skuPorCombo);

                    skuPorCombo = null;
                }

                if (listaSkuPorComboEliminados.Count > 0)
                {
                    UsuarioDeseaEliminarProductoAlCombo?.Invoke(sender, new ComboArgumento
                    {
                        Combo = new Combo
                        {
                            COMBO_ID = idCombo
                            ,
                            SkusPorCombo = listaSkuPorComboEliminados
                        }
                    });
                }

                e.Handled = true;

                UiVistaSkusCombo.JSProperties.Add("cpTerminoBatch", "Enabled");
            }
            else
            {
                var listaNueva = ProductosDeCombo ?? new List <SkuPorCombo>();

                foreach (var item in e.UpdateValues)
                {
                    listaNueva.Where(w => w.CODE_SKU == item.Keys["CODE_SKU"].ToString() && w.PACK_UNIT == int.Parse(item.Keys["PACK_UNIT"].ToString())).ToList().ForEach(i => i.QTY = int.Parse(item.NewValues["QTY"].ToString()));
                }

                foreach (var item in e.DeleteValues)
                {
                    var tmp = (List <SkuPorCombo>)listaNueva;

                    tmp.RemoveAll(x => x.CODE_SKU == item.Keys["CODE_SKU"].ToString() && x.PACK_UNIT == int.Parse(item.Keys["PACK_UNIT"].ToString()));

                    listaNueva = tmp;
                }

                ProductosDeCombo = listaNueva;

                e.Handled = true;

                var res =
                    ProductosNoAsociadosAlCombo.Where(
                        s => ProductosDeCombo.All(s2 => s2.CODE_SKU != s.CODE_SKU && s2.PACK_UNIT != s.PACK_UNIT)).ToList();

                ProductosNoAsociadosAlCombo = res;

                UiVistaSkusCombo.JSProperties.Add("cpTerminoBatchNuevoCombo", "Enabled");
            }
        }