public Boolean procesoGenerarMoviInve(in_Ing_Egr_Inven_Info info, decimal IdNumMovi, ref string mensajeError)
        {
            try
            {
                Boolean           res = true;
                string            IdEstadoAproba_Param = "";
                string            IdEstadoAproba       = "";
                in_Parametro_Bus  busParam             = new in_Parametro_Bus();
                in_Parametro_Info infoParam            = new in_Parametro_Info();
                infoParam = busParam.Get_Info_Parametro(info.IdEmpresa);

                if (info.signo == "+")
                {
                    IdEstadoAproba_Param = infoParam.IdEstadoAproba_x_Ing;
                }
                else
                {
                    IdEstadoAproba_Param = infoParam.IdEstadoAproba_x_Egr;
                }

                //Recosteo
                ProcesoRecosteoInventario(info);

                var query = from bod in info.listIng_Egr
                            group bod by bod.IdBodega into grupoBodega
                            orderby grupoBodega.Key
                            select grupoBodega;

                if (query.Count() > 1)
                {
                    // Varias bodegas
                    foreach (var grupoBodega in query)
                    {
                        // Detalle
                        List <in_Ing_Egr_Inven_det_Info> list_IngEgrDet = new List <in_Ing_Egr_Inven_det_Info>();
                        foreach (var bod in grupoBodega)
                        {
                            in_Ing_Egr_Inven_det_Info infoDet = new in_Ing_Egr_Inven_det_Info();

                            //prueba
                            infoDet.IdEmpresa  = bod.IdEmpresa;
                            infoDet.IdSucursal = bod.IdSucursal;
                            infoDet.IdNumMovi  = bod.IdNumMovi;
                            infoDet.Secuencia  = bod.Secuencia;
                            //prueba

                            infoDet.IdBodega       = bod.IdBodega;
                            infoDet.IdProducto     = bod.IdProducto;
                            infoDet.dm_cantidad    = bod.dm_cantidad;
                            infoDet.dm_observacion = bod.dm_observacion;
                            infoDet.mv_costo       = bod.mv_costo;
                            infoDet.IdCentroCosto  = bod.IdCentroCosto;
                            infoDet.IdCentroCosto_sub_centro_costo = bod.IdCentroCosto_sub_centro_costo;
                            infoDet.pr_descripcion      = bod.pr_descripcion;
                            infoDet.IdPunto_cargo       = bod.IdPunto_cargo;
                            infoDet.IdUnidadMedida      = bod.IdUnidadMedida;
                            infoDet.IdPunto_cargo_grupo = bod.IdPunto_cargo_grupo;
                            infoDet.IdMotivo_Inv        = bod.IdMotivo_Inv;

                            if (bod.IdEstadoAproba == null)
                            {
                                infoDet.IdEstadoAproba = Get_EstadoApro(bod.IdEmpresa, bod.IdSucursal, Convert.ToInt32(bod.IdBodega), IdEstadoAproba_Param);
                            }
                            else
                            {
                                infoDet.IdEstadoAproba = bod.IdEstadoAproba;
                            }

                            if (infoDet.IdEstadoAproba == Cl_Enumeradores.eEstadoAprobacion_Ing_Egr.PEND.ToString())
                            {
                                infoDet.Motivo_Aprobacion = null;
                            }
                            else
                            {
                                infoDet.Motivo_Aprobacion = (bod.Motivo_Aprobacion == null) ? "APROBADO POR SISTEMAS" : bod.Motivo_Aprobacion;
                            }

                            infoDet.IdUnidadMedida_sinConversion = bod.IdUnidadMedida_sinConversion;
                            infoDet.mv_costo_sinConversion       = bod.mv_costo_sinConversion;
                            infoDet.dm_cantidad_sinConversion    = bod.dm_cantidad_sinConversion;

                            list_IngEgrDet.Add(infoDet);
                        }
                        //cabecera
                        in_Ing_Egr_Inven_Info info_IngEgr = new in_Ing_Egr_Inven_Info();

                        info_IngEgr.IdEmpresa         = info.IdEmpresa;
                        info_IngEgr.IdNumMovi         = info.IdNumMovi;
                        info_IngEgr.IdSucursal        = info.IdSucursal;
                        info_IngEgr.IdBodega          = info.IdBodega;
                        info_IngEgr.CodMoviInven      = info.CodMoviInven;
                        info_IngEgr.cm_observacion    = info.cm_observacion;
                        info_IngEgr.IdMovi_inven_tipo = info.IdMovi_inven_tipo;
                        info_IngEgr.cm_fecha          = info.cm_fecha;
                        info_IngEgr.IdUsuario         = info.IdUsuario;
                        info_IngEgr.nom_pc            = info.nom_pc;
                        info_IngEgr.ip            = info.ip;
                        info_IngEgr.Fecha_Transac = info.Fecha_Transac;
                        info_IngEgr.signo         = info.signo;
                        info_IngEgr.IdMotivo_Inv  = info.IdMotivo_Inv;
                        info_IngEgr.listIng_Egr   = list_IngEgrDet;//asignando el detalle

                        res = Genera_Inventario(info_IngEgr, ref IdNumMovi, ref mensaje);
                    }
                }
                else
                {
                    IdEstadoAproba = Get_EstadoApro(Convert.ToInt32(info.IdEmpresa), Convert.ToInt32(info.IdSucursal), Convert.ToInt32(info.IdBodega), IdEstadoAproba_Param);
                    foreach (var item in info.listIng_Egr)
                    {
                        if (item.IdEstadoAproba == null)
                        {
                            item.IdEstadoAproba = IdEstadoAproba;
                        }

                        if (item.IdEstadoAproba == Cl_Enumeradores.eEstadoAprobacion_Ing_Egr.PEND.ToString())
                        {
                            item.Motivo_Aprobacion = null;
                        }
                        else
                        {
                            item.Motivo_Aprobacion = (item.Motivo_Aprobacion == null) ? "APROBADO POR SISTEMAS" : item.Motivo_Aprobacion;
                        }
                    }

                    //una bodega
                    res = Genera_Inventario(info, ref IdNumMovi, ref mensaje);
                }
                return(res);
            }
            catch (Exception ex)
            {
                Core.Erp.Info.Log_Exception.LoggingManager.Logger.Log(Core.Erp.Info.Log_Exception.LoggingCategory.Error, ex.Message);
                throw new Core.Erp.Info.Log_Exception.DalException(string.Format("", "procesoGenerarMoviInve", ex.Message), ex)
                      {
                          EntityType = typeof(in_Ing_Egr_Inven_Bus)
                      };
            }
        }
        public Boolean ModificarDB(in_Ing_Egr_Inven_Info info, ref string msgs)
        {
            try
            {
                in_Ing_Egr_Inven_det_Data dataDet   = new in_Ing_Egr_Inven_det_Data();
                in_Parametro_Bus          busParam  = new in_Parametro_Bus();
                in_Parametro_Info         infoParam = new in_Parametro_Info();
                string IdEstadoAproba_Param         = "";
                infoParam = busParam.Get_Info_Parametro(info.IdEmpresa);
                if (InfoParam.IdEmpresa == 0)
                {
                    return(false);
                }
                if (info.signo == "+")
                {
                    IdEstadoAproba_Param = infoParam.IdEstadoAproba_x_Ing;
                }
                else
                {
                    IdEstadoAproba_Param = infoParam.IdEstadoAproba_x_Egr;
                }

                Boolean res = false;

                if (Validar_objeto_IngEgr(info, ref mensaje))
                {
                    //arreglando los id del detalle en caso q no venga sin id
                    foreach (var item in info.listIng_Egr)
                    {
                        item.IdEmpresa         = info.IdEmpresa;
                        item.IdSucursal        = info.IdSucursal;
                        item.IdNumMovi         = info.IdNumMovi;
                        item.IdMovi_inven_tipo = info.IdMovi_inven_tipo;
                        item.signo             = info.signo;

                        in_producto_Bus  BusProducto = new in_producto_Bus();
                        in_Producto_Info InfoProdu   = BusProducto.Get_info_Product(info.IdEmpresa, item.IdProducto);

                        if (item.IdEstadoAproba == null || item.IdEstadoAproba == "")
                        {
                            if (info.signo == "+")
                            {
                                IdEstadoAproba_Param = infoParam.IdEstadoAproba_x_Ing;
                            }
                            else
                            {
                                IdEstadoAproba_Param = infoParam.IdEstadoAproba_x_Egr;
                            }
                            item.IdEstadoAproba = Get_EstadoApro(Convert.ToInt32(info.IdEmpresa), Convert.ToInt32(info.IdSucursal), Convert.ToInt32(info.IdBodega), IdEstadoAproba_Param);
                        }
                        if (item.IdUnidadMedida_sinConversion == null || item.IdUnidadMedida_sinConversion == "" || item.IdUnidadMedida == null || item.IdUnidadMedida == "")
                        {
                            item.IdUnidadMedida               = InfoProdu.IdUnidadMedida;
                            item.IdUnidadMedida_Consumo       = InfoProdu.IdUnidadMedida_Consumo;
                            item.IdUnidadMedida_sinConversion = InfoProdu.IdUnidadMedida;
                        }
                        if (item.mv_costo_sinConversion == 0 || item.signo == "-")
                        {
                            in_producto_x_tb_bodega_Costo_Historico_Bus  BusProd_x_Costo     = new in_producto_x_tb_bodega_Costo_Historico_Bus();
                            in_producto_x_tb_bodega_Costo_Historico_Info Info_Produc_x_Costo = new in_producto_x_tb_bodega_Costo_Historico_Info();
                            Info_Produc_x_Costo         = BusProd_x_Costo.get_UltimoCosto_x_Producto_Bodega(item.IdEmpresa, item.IdSucursal, Convert.ToInt32(item.IdBodega), item.IdProducto, info.cm_fecha);
                            item.mv_costo               = Info_Produc_x_Costo.costo;
                            item.mv_costo_sinConversion = Info_Produc_x_Costo.costo;
                        }
                        #region Convierte costo y cantidad en la unidad de consumo
                        ValorEquiv          = 0;
                        InfoUni_Equiv       = busUni_Equiv.Get_Info_in_UnidadMedida_Equiv_conversion(item.IdUnidadMedida_sinConversion, InfoProdu.IdUnidadMedida_Consumo);
                        ValorEquiv          = InfoUni_Equiv.valor_equiv == 0 ? 1 : InfoUni_Equiv.valor_equiv;
                        item.dm_cantidad    = item.dm_cantidad_sinConversion * ValorEquiv;
                        item.mv_costo       = item.mv_costo_sinConversion / ValorEquiv;
                        item.IdUnidadMedida = InfoProdu.IdUnidadMedida_Consumo;
                        #endregion
                    }

                    if (dataDet.EliminarDB(info.IdEmpresa, info.IdSucursal, info.IdMovi_inven_tipo, info.IdNumMovi, ref msgs))
                    {
                        info.IdUsuarioUltModi = param.IdUsuario;

                        if (odata.ModificarDB(info, ref msgs))
                        {
                            foreach (var item in info.listIng_Egr)
                            {
                                item.Secuencia      = 0;
                                item.IdEstadoAproba = Get_EstadoApro(Convert.ToInt32(info.IdEmpresa), Convert.ToInt32(info.IdSucursal), Convert.ToInt32(info.IdBodega), IdEstadoAproba_Param);

                                if (item.IdEmpresa == null || item.IdEmpresa == 0)
                                {
                                    item.IdEmpresa = Convert.ToInt32(info.IdEmpresa);
                                }

                                if (item.IdSucursal == null || item.IdSucursal == 0)
                                {
                                    item.IdSucursal = Convert.ToInt32(info.IdSucursal);
                                }

                                if (item.IdBodega == null || item.IdBodega == 0)
                                {
                                    item.IdBodega = Convert.ToInt32(info.IdBodega);
                                }

                                if (item.IdMovi_inven_tipo == null || item.IdMovi_inven_tipo == 0)
                                {
                                    item.IdMovi_inven_tipo = Convert.ToInt32(info.IdMovi_inven_tipo);
                                }

                                if (item.IdNumMovi == null || item.IdNumMovi == 0)
                                {
                                    item.IdNumMovi = Convert.ToInt32(info.IdNumMovi);
                                }
                            }

                            if (dataDet.GuardarDB(info.listIng_Egr))
                            {
                                res = true;
                                res = procesoGenerarMoviInve(info, info.IdNumMovi, ref mensaje);
                            }
                        }
                    }
                }

                return(res);
            }
            catch (Exception ex)
            {
                Core.Erp.Info.Log_Exception.LoggingManager.Logger.Log(Core.Erp.Info.Log_Exception.LoggingCategory.Error, ex.Message);
                throw new Core.Erp.Info.Log_Exception.DalException(string.Format("", "ModificarDB", ex.Message), ex)
                      {
                          EntityType = typeof(in_Ing_Egr_Inven_Bus)
                      };
            }
        }
Ejemplo n.º 3
0
        public Boolean GuardarDB(in_devolucion_inven_Info info, ref decimal IdDev_Inven, ref string mensaje)
        {
            Boolean Respuesta = false;

            try
            {
                int c = 0;
                Respuesta = oDat.GuardarDB(info, ref IdDev_Inven, ref mensaje);
                if (Respuesta)
                {
                    c = 0;
                    foreach (var item in info.lista_detalle)
                    {
                        item.IdDev_Inven = IdDev_Inven;
                        c++;
                        item.secuencia = c;
                    }
                    in_devolucion_inven_det_Bus BusDev_inv_det = new in_devolucion_inven_det_Bus();
                    Respuesta = BusDev_inv_det.GuardarDB(info.lista_detalle, ref mensaje);


                    in_Parametro_Bus  BusParametro  = new in_Parametro_Bus();
                    in_Parametro_Info InfoParametro = new in_Parametro_Info();
                    InfoParametro = BusParametro.Get_Info_Parametro(info.IdEmpresa);
                    in_movi_inven_tipo_Info InfoMovi_tipo = new in_movi_inven_tipo_Info();
                    in_movi_inven_tipo_Bus  BusMovi_tipo  = new in_movi_inven_tipo_Bus();


                    InfoMovi_tipo = BusMovi_tipo.Get_Info_movi_inven_tipo(info.IdEmpresa, info.IdMovi_inven_tipo);

                    //                    in_movi_inve_Bus BusMovi_Inven = new in_movi_inve_Bus();
                    //                    in_movi_inve_Info InfoMovi_Inven = new in_movi_inve_Info();

                    //InfoMovi_Inven  = BusMovi_Inven.Get_Info_Movi_inven(info.IdEmpresa, info.IdSucursal_movi_inven, info.IdBodega_movi_inven, info.IdMovi_inven_tipo, info.IdNumMovi);

                    in_Ing_Egr_Inven_Bus  Bus_Ing_Egre = new in_Ing_Egr_Inven_Bus();
                    in_Ing_Egr_Inven_Info Info_Ing_Egr = new in_Ing_Egr_Inven_Info();

                    Info_Ing_Egr = Bus_Ing_Egre.Get_Info_Ing_Egr_Inven(info.IdEmpresa, info.IdSucursal_movi_inven, info.IdMovi_inven_tipo, info.IdNumMovi);

                    Info_Ing_Egr.IdNumMovi    = 0;
                    Info_Ing_Egr.IdMotivo_Inv = 1;
                    if (InfoMovi_tipo.cm_tipo_movi == "-")// si es positivo hacer un egreso
                    {
                        Info_Ing_Egr.IdMovi_inven_tipo = Convert.ToInt32(InfoParametro.IdMovi_Inven_tipo_x_Dev_Inv_x_Erg);
                        Info_Ing_Egr.signo             = "+";
                    }
                    else
                    {
                        Info_Ing_Egr.IdMovi_inven_tipo = Convert.ToInt32(InfoParametro.IdMovi_Inven_tipo_x_Dev_Inv_x_Ing);
                        Info_Ing_Egr.signo             = "-";
                    }

                    Info_Ing_Egr.CodMoviInven   = "";
                    Info_Ing_Egr.cm_observacion = "Ing x Dev/Inv. " + info.observacion;
                    Info_Ing_Egr.cm_fecha       = info.Fecha.Date;//La fecha de devolución
                    Info_Ing_Egr.IdUsuario      = param.IdUsuario;
                    Info_Ing_Egr.Estado         = "A";

                    c = 0;


                    foreach (var item in info.lista_detalle)
                    {
                        c = c + 1;
                        in_movi_inve_detalle_Info info_det_movi = new in_movi_inve_detalle_Info();
                        in_movi_inve_detalle_Bus  bus_det_movi  = new in_movi_inve_detalle_Bus();
                        info_det_movi = bus_det_movi.Get_info_Movi_inven_det(item.IdEmpresa_movi_inv, item.IdSucursal_movi_inv, item.IdBodega_movi_inv, item.IdMovi_inven_tipo_movi_inv, item.IdNumMovi_movi_inv, item.Secuencia_movi_inv);

                        in_Ing_Egr_Inven_det_Info InfoDet_Ing_Egr = new in_Ing_Egr_Inven_det_Info();

                        InfoDet_Ing_Egr.IdEmpresa  = item.IdEmpresa;
                        InfoDet_Ing_Egr.IdSucursal = item.IdSucursal_movi_inv;
                        InfoDet_Ing_Egr.IdNumMovi  = 0;
                        InfoDet_Ing_Egr.Secuencia  = c;
                        InfoDet_Ing_Egr.IdBodega   = item.IdBodega_movi_inv;
                        InfoDet_Ing_Egr.IdProducto = info_det_movi.IdProducto;
                        if (Info_Ing_Egr.signo == "+")// si es positivo hacer un egreso
                        {
                            InfoDet_Ing_Egr.dm_cantidad_sinConversion = Math.Abs(item.cantidad_a_devolver);
                            InfoDet_Ing_Egr.dm_cantidad    = Math.Abs(item.cantidad_a_devolver);
                            InfoDet_Ing_Egr.IdEstadoAproba = "APRO";//Debe ir directamente aprobado para poder vincularlo al ing/egr que se va a devolver por cuestiones del recosteo
                        }
                        else
                        {
                            InfoDet_Ing_Egr.dm_cantidad_sinConversion = Math.Abs(item.cantidad_a_devolver);
                            InfoDet_Ing_Egr.dm_cantidad    = Math.Abs(item.cantidad_a_devolver) * -1;
                            InfoDet_Ing_Egr.IdEstadoAproba = "APRO";//Debe ir directamente aprobado para poder vincularlo al ing/egr que se va a devolver por cuestiones del recosteo
                        }

                        //Se pasa directamente el costo y unidad de medida convertido
                        InfoDet_Ing_Egr.mv_costo_sinConversion = (info_det_movi.mv_costo == null) ? 0 : Convert.ToDouble(info_det_movi.mv_costo);
                        InfoDet_Ing_Egr.mv_costo                     = (info_det_movi.mv_costo == null) ? 0 : Convert.ToDouble(info_det_movi.mv_costo);
                        InfoDet_Ing_Egr.IdUnidadMedida               = info_det_movi.IdUnidadMedida;
                        InfoDet_Ing_Egr.IdUnidadMedida_Consumo       = info_det_movi.IdUnidadMedida;
                        InfoDet_Ing_Egr.IdUnidadMedida_sinConversion = info_det_movi.IdUnidadMedida;

                        //Ingreso los id del detalle que esta devolviendo
                        InfoDet_Ing_Egr.IdEmpresa_dev         = item.IdEmpresa_movi_inv;
                        InfoDet_Ing_Egr.IdSucursal_dev        = item.IdSucursal_movi_inv;
                        InfoDet_Ing_Egr.IdBodega_dev          = item.IdBodega_movi_inv;
                        InfoDet_Ing_Egr.IdMovi_inven_tipo_dev = item.IdMovi_inven_tipo_movi_inv;
                        InfoDet_Ing_Egr.IdNumMovi_dev         = item.IdNumMovi_movi_inv;
                        InfoDet_Ing_Egr.Secuencia_dev         = item.Secuencia_movi_inv;

                        //Campos de egresos
                        InfoDet_Ing_Egr.IdPunto_cargo                  = info_det_movi.IdPunto_Cargo;
                        InfoDet_Ing_Egr.IdPunto_cargo_grupo            = info_det_movi.IdPunto_cargo_grupo;
                        InfoDet_Ing_Egr.IdCentroCosto                  = info_det_movi.IdCentroCosto;
                        InfoDet_Ing_Egr.IdCentroCosto_sub_centro_costo = info_det_movi.IdCentroCosto_sub_centro_costo;

                        Info_Ing_Egr.listIng_Egr.Add(InfoDet_Ing_Egr);
                    }

                    decimal IdNumMovi = 0;

                    Respuesta = Bus_Ing_Egre.GuardarDB(Info_Ing_Egr, ref IdNumMovi, ref mensaje);
                }


                return(Respuesta);
            }
            catch (Exception ex)
            {
                Core.Erp.Info.Log_Exception.LoggingManager.Logger.Log(Core.Erp.Info.Log_Exception.LoggingCategory.Error, ex.Message);
                throw new Core.Erp.Info.Log_Exception.DalException(string.Format("", "GuardarDB", ex.Message), ex)
                      {
                          EntityType = typeof(in_devolucion_inven_Bus)
                      };
            }
        }