Beispiel #1
0
        private void GuardarAsignacion()
        {
            // Se valida que la línea quede completa
            var oSucPartes = new Dictionary <string, int>();
            var oSucCant   = new Dictionary <string, int>();

            foreach (DataGridViewRow oFila in this.dgvAsignacionManual.Rows)
            {
                string sSucursal = Util.Cadena(oFila.Cells["Asignacion_Sucursal"].Value);
                oSucPartes[sSucursal] = Util.Entero(oFila.Cells["Asignacion_Partes"].Value);
                if (!oSucCant.ContainsKey(sSucursal))
                {
                    oSucCant.Add(sSucursal, 0);
                }
                oSucCant[sSucursal] += Util.Entero(oFila.Cells["Asignacion_Cantidad"].Value);
            }
            this.ctlError.LimpiarErrores();
            string sError = "";

            foreach (var oSucursal in oSucPartes)
            {
                if (oSucCant[oSucursal.Key] != oSucursal.Value)
                {
                    sError += string.Format("La cantidad asignada a la sucursal {0}, es diferente a las partes existentes para el conteo.\n", oSucursal.Key);
                }
            }
            if (sError != "")
            {
                this.ctlError.PonerError(this.btnAsignar, sError, ErrorIconAlignment.MiddleLeft);
                return;
            }

            this.btnAsignar.Enabled = false;
            Cargando.Mostrar();

            // Se procede a guardar los datos
            int      iLineaID = Util.Entero(this.cmbLinea.SelectedValue);
            var      oAvManual = Datos.GetListOf <InventarioLinea>(c => c.AvManual > 0);
            int      iAvManual = (oAvManual.Count > 0 ? (oAvManual.Max(c => c.AvManual).Valor() + 1) : 1);
            var      oPartes = Datos.GetListOf <Parte>(c => c.LineaID == iLineaID && c.Estatus);
            int      iParte = 0, iSucursalID = 0, iCantidad, iUsuarioID;
            var      oInvLineas = new Dictionary <int, int>();
            DateTime dAhora     = DateTime.Now;

            foreach (DataGridViewRow oFila in this.dgvAsignacionManual.Rows)
            {
                if (Util.Entero(oFila.Cells["Asignacion_SucursalID"].Value) != iSucursalID)
                {
                    iSucursalID = Util.Entero(oFila.Cells["Asignacion_SucursalID"].Value);
                    iParte      = 0;
                }
                iCantidad  = Util.Entero(oFila.Cells["Asignacion_Cantidad"].Value);
                iUsuarioID = Util.Entero(oFila.Cells["Asignacion_UsuarioID"].Value);
                while (iCantidad > 0 && iParte < oPartes.Count)
                {
                    int iParteID = oPartes[iParte++].ParteID;

                    // Se valida la existencia
                    var oParteEx = Datos.GetEntity <ParteExistencia>(c => c.ParteID == iParteID && c.SucursalID == iSucursalID && c.Estatus);
                    if (oParteEx.Existencia <= 0)
                    {
                        continue;
                    }

                    // Se agrega el InventarioLinea, si no se ha agregado
                    if (!oInvLineas.ContainsKey(iSucursalID))
                    {
                        var oInvLinea = new InventarioLinea()
                        {
                            SucursalID          = iSucursalID
                            , LineaID           = iLineaID
                            , EstatusGenericoID = Cat.EstatusGenericos.EnCurso
                            , FechaIniciado     = dAhora
                            , AvManual          = iAvManual
                        };
                        Datos.Guardar <InventarioLinea>(oInvLinea);
                        oInvLineas.Add(iSucursalID, oInvLinea.InventarioLineaID);
                    }
                    // Se agrega al conteo
                    var oConteo = new InventarioConteo()
                    {
                        InventarioLineaID = oInvLineas[iSucursalID]
                        , Dia             = dAhora
                        , ConteoUsuarioID = iUsuarioID
                        , ParteID         = iParteID
                    };
                    Datos.Guardar <InventarioConteo>(oConteo);

                    //
                    iCantidad--;
                }
            }

            Cargando.Cerrar();
        }
Beispiel #2
0
        private void GuardarAsignacion()
        {
            // Se valida que la línea quede completa
            var oSucPartes = new Dictionary<string, int>();
            var oSucCant = new Dictionary<string, int>();
            foreach (DataGridViewRow oFila in this.dgvAsignacionManual.Rows)
            {
                string sSucursal = Util.Cadena(oFila.Cells["Asignacion_Sucursal"].Value);
                oSucPartes[sSucursal] = Util.Entero(oFila.Cells["Asignacion_Partes"].Value);
                if (!oSucCant.ContainsKey(sSucursal))
                    oSucCant.Add(sSucursal, 0);
                oSucCant[sSucursal] += Util.Entero(oFila.Cells["Asignacion_Cantidad"].Value);
            }
            this.ctlError.LimpiarErrores();
            string sError = "";
            foreach (var oSucursal in oSucPartes)
            {
                if (oSucCant[oSucursal.Key] != oSucursal.Value)
                    sError += string.Format("La cantidad asignada a la sucursal {0}, es diferente a las partes existentes para el conteo.\n", oSucursal.Key);
            }
            if (sError != "")
            {
                this.ctlError.PonerError(this.btnAsignar, sError, ErrorIconAlignment.MiddleLeft);
                return;
            }

            this.btnAsignar.Enabled = false;
            Cargando.Mostrar();

            // Se procede a guardar los datos
            int iLineaID = Util.Entero(this.cmbLinea.SelectedValue);
            var oAvManual = Datos.GetListOf<InventarioLinea>(c => c.AvManual > 0);
            int iAvManual = (oAvManual.Count > 0 ? (oAvManual.Max(c => c.AvManual).Valor() + 1) : 1);
            var oPartes = Datos.GetListOf<Parte>(c => c.LineaID == iLineaID && c.Estatus);
            int iParte = 0, iSucursalID = 0, iCantidad, iUsuarioID;
            var oInvLineas = new Dictionary<int, int>();
            DateTime dAhora = DateTime.Now;
            foreach (DataGridViewRow oFila in this.dgvAsignacionManual.Rows)
            {
                if (Util.Entero(oFila.Cells["Asignacion_SucursalID"].Value) != iSucursalID)
                {
                    iSucursalID = Util.Entero(oFila.Cells["Asignacion_SucursalID"].Value);
                    iParte = 0;
                }
                iCantidad = Util.Entero(oFila.Cells["Asignacion_Cantidad"].Value);
                iUsuarioID = Util.Entero(oFila.Cells["Asignacion_UsuarioID"].Value);
                while (iCantidad > 0 && iParte < oPartes.Count)
                {
                    int iParteID = oPartes[iParte++].ParteID;

                    // Se valida la existencia
                    var oParteEx = Datos.GetEntity<ParteExistencia>(c => c.ParteID == iParteID && c.SucursalID == iSucursalID && c.Estatus);
                    if (oParteEx.Existencia <= 0) continue;

                    // Se agrega el InventarioLinea, si no se ha agregado
                    if (!oInvLineas.ContainsKey(iSucursalID))
                    {
                        var oInvLinea = new InventarioLinea()
                        {
                            SucursalID = iSucursalID
                            , LineaID = iLineaID
                            , EstatusGenericoID = Cat.EstatusGenericos.EnCurso
                            , FechaIniciado = dAhora
                            , AvManual = iAvManual
                        };
                        Datos.Guardar<InventarioLinea>(oInvLinea);
                        oInvLineas.Add(iSucursalID, oInvLinea.InventarioLineaID);
                    }
                    // Se agrega al conteo
                    var oConteo = new InventarioConteo()
                    {
                        InventarioLineaID = oInvLineas[iSucursalID]
                        , Dia = dAhora
                        , ConteoUsuarioID = iUsuarioID
                        , ParteID = iParteID
                    };
                    Datos.Guardar<InventarioConteo>(oConteo);

                    //
                    iCantidad--;
                }
            }

            Cargando.Cerrar();
        }
Beispiel #3
0
        public static ResAcc RecibirConteoInventario(int iUsuarioID, List <modConteoInventario> oConteo)
        {
            // Se obtiene la sucursal correspondiente a los conteos, pues debe ser la misma para todos
            if (oConteo.Count <= 0)
            {
                return(new ResAcc());
            }
            int iPrimerInvID = oConteo[0].InventarioLineaID;
            var oPrimerInv   = Datos.GetEntity <InventarioLinea>(c => c.InventarioLineaID == iPrimerInvID);
            int iSucursalID  = oPrimerInv.SucursalID;

            // Se registra lo del conteo
            oConteo = oConteo.OrderBy(c => c.InventarioLineaID).ToList();
            int iInventarioLineaID = 0;
            List <InventarioLinea>  oInvConteos      = new List <InventarioLinea>();
            InventarioLinea         oInventarioLinea = null;
            List <InventarioConteo> oDiferencias1    = new List <InventarioConteo>();
            List <InventarioConteo> oDiferencias2    = new List <InventarioConteo>();
            List <InventarioConteo> oDiferencias3    = new List <InventarioConteo>();

            foreach (var oReg in oConteo)
            {
                if (oReg.InventarioLineaID != iInventarioLineaID)
                {
                    oInventarioLinea = Datos.GetEntity <InventarioLinea>(c => c.InventarioLineaID == oReg.InventarioLineaID);
                    oInvConteos.Add(oInventarioLinea);
                    iInventarioLineaID = oReg.InventarioLineaID;
                }

                // Se obtiene el conteo y la existencia, para saber si hay diferencia
                var     oParteConteo = Datos.GetEntity <InventarioConteo>(c => c.InventarioConteoID == oReg.InventarioConteoID);
                var     oExistencia  = Datos.GetEntity <ParteExistencia>(c => c.ParteID == oParteConteo.ParteID && c.SucursalID == oInventarioLinea.SucursalID && c.Estatus);
                decimal mDiferencia  = (oReg.Conteo - oExistencia.Existencia.Valor());

                // Se evalua la diferencia
                oParteConteo.Valido = true;
                switch (oParteConteo.Revision)
                {
                case null:
                case Cat.InventarioConteosRevisiones.SinRevision:
                    if (mDiferencia != 0)
                    {
                        oDiferencias1.Add(oParteConteo);
                        oParteConteo.Valido = false;
                    }
                    break;

                case Cat.InventarioConteosRevisiones.Confirmacion:
                    var oParteConteoAnt = Datos.GetEntity <InventarioConteo>(c => c.InventarioLineaID == oParteConteo.InventarioLineaID && !c.Revision.HasValue);
                    if (oParteConteoAnt.Diferencia == mDiferencia)
                    {
                        oDiferencias3.Add(oParteConteo);
                    }
                    else
                    {
                        oDiferencias2.Add(oParteConteo);
                        oParteConteo.Valido = false;
                    }
                    break;

                case Cat.InventarioConteosRevisiones.ConfirmacionGerente:
                    if (mDiferencia != 0)
                    {
                        oDiferencias3.Add(oParteConteo);
                    }
                    break;
                }

                // Se guarda la diferencia
                oParteConteo.Diferencia = mDiferencia;
                Datos.Guardar <InventarioConteo>(oParteConteo);
            }

            // Se obtienen los usuarios para inventario de todas las sucursales
            var oUsuariosInv = Datos.GetListOf <InventarioUsuario>();

            // Se obtienen los usuario para inventario de la sucursal
            var oUsuariosSuc        = oUsuariosInv.Where(c => c.SucursalID == iSucursalID).ToList();
            int iCantidadPorUsuario = (oDiferencias1.Count / oUsuariosSuc.Count);
            // Se agregan los conteos para revisión 1 (de confirmación)
            int iUsuario = 0, iCantidad = 0;

            foreach (var oReg in oDiferencias1)
            {
                var oNuevoConteo = new InventarioConteo()
                {
                    InventarioLineaID = oReg.InventarioLineaID,
                    Dia             = DateTime.Now.AddDays(1),
                    ConteoUsuarioID = oUsuariosSuc[iUsuario].InvUsuarioID,
                    ParteID         = oReg.ParteID,
                    Revision        = Cat.InventarioConteosRevisiones.Confirmacion
                };
                Datos.Guardar <InventarioConteo>(oNuevoConteo);

                if (++iCantidad >= iCantidadPorUsuario)
                {
                    if (++iUsuario >= oUsuariosSuc.Count)
                    {
                        iUsuario = 0;
                    }
                }
            }

            // Se agregan los conteos para revisión 2 (confirmación del gerente)
            var oSucursal  = Datos.GetEntity <Sucursal>(c => c.SucursalID == iSucursalID && c.Estatus);
            int iGerenteID = oSucursal.GerenteID;

            foreach (var oReg in oDiferencias2)
            {
                var oNuevoConteo = new InventarioConteo()
                {
                    InventarioLineaID = oReg.InventarioLineaID,
                    Dia             = DateTime.Now,
                    ConteoUsuarioID = iGerenteID,
                    ParteID         = oReg.ParteID,
                    Revision        = Cat.InventarioConteosRevisiones.ConfirmacionGerente
                };
                Datos.Guardar <InventarioConteo>(oNuevoConteo);
            }

            // Se agregan los conteos para revisión 3 (otras sucursales si la existencia es 0)
            var oIndiceUsuarioSucursal = new Dictionary <int, int>();
            var oInvAbiertos           = new List <int>(); // Para marcar como incompletos los inventarios que se "abran" por meter un nuevo conteo tipo 3

            foreach (var oReg in oDiferencias3)
            {
                // Se valida si la existencia en otras sucursales es cero
                var oExistencias = Datos.GetListOf <ParteExistencia>(c => c.ParteID == oReg.ParteID && c.SucursalID != iSucursalID);
                foreach (var oExist in oExistencias)
                {
                    if (oExist.Existencia == 0)
                    {
                        // Para determinar el usuario al cual asignar
                        oUsuariosSuc = oUsuariosInv.Where(c => c.SucursalID == oExist.SucursalID).ToList();
                        if (!oIndiceUsuarioSucursal.ContainsKey(oExist.SucursalID))
                        {
                            oIndiceUsuarioSucursal.Add(oExist.SucursalID, 0);
                        }

                        var oNuevoConteo = new InventarioConteo()
                        {
                            InventarioLineaID = oReg.InventarioLineaID,
                            Dia             = DateTime.Now.AddDays(1),
                            ConteoUsuarioID = oUsuariosSuc[oIndiceUsuarioSucursal[oExist.SucursalID]].InvUsuarioID,
                            ParteID         = oReg.ParteID,
                            Revision        = Cat.InventarioConteosRevisiones.OtraSucursal
                        };
                        Datos.Guardar <InventarioConteo>(oNuevoConteo);

                        //
                        if (!oInvAbiertos.Contains(oReg.InventarioLineaID))
                        {
                            oInvAbiertos.Add(oReg.InventarioLineaID);
                        }

                        //
                        if (++oIndiceUsuarioSucursal[oExist.SucursalID] >= oUsuariosSuc.Count)
                        {
                            oIndiceUsuarioSucursal[oExist.SucursalID] = 0;
                        }
                    }
                }
            }
            // Se marcan como incompletos los inventarios abiertos por este proceso
            foreach (int iInvID in oInvAbiertos)
            {
                var oInv = Datos.GetEntity <InventarioLinea>(c => c.InventarioLineaID == iInvID);
                oInv.EstatusGenericoID = Cat.EstatusGenericos.EnRevision;
                oInv.FechaCompletado   = null;
                Datos.Guardar <InventarioLinea>(oInv);
            }

            // Se marcan como completado los inventarios ya concluidos, si hubiera
            foreach (var oReg in oInvConteos)
            {
                var oInvConteoV = Datos.GetEntity <InventarioLineasConteosView>(c => c.InventarioLineaID == oReg.InventarioLineaID);
                // Se valida si ya se completó el conteo
                if (oInvConteoV.PartesLinea > oInvConteoV.Conteo)
                {
                    continue;
                }
                else
                {
                    oReg.EstatusGenericoID = Cat.EstatusGenericos.Completada;
                    oReg.FechaCompletado   = DateTime.Now;
                }

                Datos.Guardar <InventarioLinea>(oReg);
            }

            return(new ResAcc());
        }
Beispiel #4
0
        public static ResAcc RecibirConteoInventario(int iUsuarioID, List<modConteoInventario> oConteo)
        {
            // Se obtiene la sucursal correspondiente a los conteos, pues debe ser la misma para todos
            if (oConteo.Count <= 0)
                return new ResAcc();
            int iPrimerInvID = oConteo[0].InventarioLineaID;
            var oPrimerInv = Datos.GetEntity<InventarioLinea>(c => c.InventarioLineaID == iPrimerInvID);
            int iSucursalID = oPrimerInv.SucursalID;

            // Se registra lo del conteo
            oConteo = oConteo.OrderBy(c => c.InventarioLineaID).ToList();
            int iInventarioLineaID = 0;
            List<InventarioLinea> oInvConteos = new List<InventarioLinea>();
            InventarioLinea oInventarioLinea = null;
            List<InventarioConteo> oDiferencias1 = new List<InventarioConteo>();
            List<InventarioConteo> oDiferencias2 = new List<InventarioConteo>();
            List<InventarioConteo> oDiferencias3 = new List<InventarioConteo>();
            foreach (var oReg in oConteo)
            {
                if (oReg.InventarioLineaID != iInventarioLineaID)
                {
                    oInventarioLinea = Datos.GetEntity<InventarioLinea>(c => c.InventarioLineaID == oReg.InventarioLineaID);
                    oInvConteos.Add(oInventarioLinea);
                    iInventarioLineaID = oReg.InventarioLineaID;
                }

                // Se obtiene el conteo y la existencia, para saber si hay diferencia
                var oParteConteo = Datos.GetEntity<InventarioConteo>(c => c.InventarioConteoID == oReg.InventarioConteoID);
                var oExistencia = Datos.GetEntity<ParteExistencia>(c => c.ParteID == oParteConteo.ParteID && c.SucursalID == oInventarioLinea.SucursalID && c.Estatus);
                decimal mDiferencia = (oReg.Conteo - oExistencia.Existencia.Valor());

                // Se evalua la diferencia
                oParteConteo.Valido = true;
                switch (oParteConteo.Revision)
                {
                    case null:
                    case Cat.InventarioConteosRevisiones.SinRevision:
                        if (mDiferencia != 0)
                        {
                            oDiferencias1.Add(oParteConteo);
                            oParteConteo.Valido = false;
                        }
                        break;
                    case Cat.InventarioConteosRevisiones.Confirmacion:
                        var oParteConteoAnt = Datos.GetEntity<InventarioConteo>(c => c.InventarioLineaID == oParteConteo.InventarioLineaID && !c.Revision.HasValue);
                        if (oParteConteoAnt.Diferencia == mDiferencia)
                        {
                            oDiferencias3.Add(oParteConteo);
                        }
                        else
                        {
                            oDiferencias2.Add(oParteConteo);
                            oParteConteo.Valido = false;
                        }
                        break;
                    case Cat.InventarioConteosRevisiones.ConfirmacionGerente:
                        if (mDiferencia != 0)
                            oDiferencias3.Add(oParteConteo);
                        break;
                }

                // Se guarda la diferencia
                oParteConteo.Diferencia = mDiferencia;
                Datos.Guardar<InventarioConteo>(oParteConteo);
            }

            // Se obtienen los usuarios para inventario de todas las sucursales
            var oUsuariosInv = Datos.GetListOf<InventarioUsuario>();

            // Se obtienen los usuario para inventario de la sucursal
            var oUsuariosSuc = oUsuariosInv.Where(c => c.SucursalID == iSucursalID).ToList();
            int iCantidadPorUsuario = (oDiferencias1.Count / oUsuariosSuc.Count);
            // Se agregan los conteos para revisión 1 (de confirmación)
            int iUsuario = 0, iCantidad = 0;
            foreach (var oReg in oDiferencias1)
            {
                var oNuevoConteo = new InventarioConteo()
                {
                    InventarioLineaID = oReg.InventarioLineaID,
                    Dia = DateTime.Now.AddDays(1),
                    ConteoUsuarioID = oUsuariosSuc[iUsuario].InvUsuarioID,
                    ParteID = oReg.ParteID,
                    Revision = Cat.InventarioConteosRevisiones.Confirmacion
                };
                Datos.Guardar<InventarioConteo>(oNuevoConteo);

                if (++iCantidad >= iCantidadPorUsuario)
                {
                    if (++iUsuario >= oUsuariosSuc.Count)
                        iUsuario = 0;
                }
            }

            // Se agregan los conteos para revisión 2 (confirmación del gerente)
            var oSucursal = Datos.GetEntity<Sucursal>(c => c.SucursalID == iSucursalID && c.Estatus);
            int iGerenteID = oSucursal.GerenteID;
            foreach (var oReg in oDiferencias2)
            {
                var oNuevoConteo = new InventarioConteo()
                {
                    InventarioLineaID = oReg.InventarioLineaID,
                    Dia = DateTime.Now,
                    ConteoUsuarioID = iGerenteID,
                    ParteID = oReg.ParteID,
                    Revision = Cat.InventarioConteosRevisiones.ConfirmacionGerente
                };
                Datos.Guardar<InventarioConteo>(oNuevoConteo);
            }

            // Se agregan los conteos para revisión 3 (otras sucursales si la existencia es 0)
            var oIndiceUsuarioSucursal = new Dictionary<int, int>();
            var oInvAbiertos = new List<int>();  // Para marcar como incompletos los inventarios que se "abran" por meter un nuevo conteo tipo 3
            foreach (var oReg in oDiferencias3)
            {
                // Se valida si la existencia en otras sucursales es cero
                var oExistencias = Datos.GetListOf<ParteExistencia>(c => c.ParteID == oReg.ParteID && c.SucursalID != iSucursalID);
                foreach (var oExist in oExistencias)
                {
                    if (oExist.Existencia == 0)
                    {
                        // Para determinar el usuario al cual asignar
                        oUsuariosSuc = oUsuariosInv.Where(c => c.SucursalID == oExist.SucursalID).ToList();
                        if (!oIndiceUsuarioSucursal.ContainsKey(oExist.SucursalID))
                            oIndiceUsuarioSucursal.Add(oExist.SucursalID, 0);

                        var oNuevoConteo = new InventarioConteo()
                        {
                            InventarioLineaID = oReg.InventarioLineaID,
                            Dia = DateTime.Now.AddDays(1),
                            ConteoUsuarioID = oUsuariosSuc[oIndiceUsuarioSucursal[oExist.SucursalID]].InvUsuarioID,
                            ParteID = oReg.ParteID,
                            Revision = Cat.InventarioConteosRevisiones.OtraSucursal
                        };
                        Datos.Guardar<InventarioConteo>(oNuevoConteo);

                        //
                        if (!oInvAbiertos.Contains(oReg.InventarioLineaID))
                            oInvAbiertos.Add(oReg.InventarioLineaID);

                        //
                        if (++oIndiceUsuarioSucursal[oExist.SucursalID] >= oUsuariosSuc.Count)
                            oIndiceUsuarioSucursal[oExist.SucursalID] = 0;
                    }
                }
            }
            // Se marcan como incompletos los inventarios abiertos por este proceso
            foreach (int iInvID in oInvAbiertos)
            {
                var oInv = Datos.GetEntity<InventarioLinea>(c => c.InventarioLineaID == iInvID);
                oInv.EstatusGenericoID = Cat.EstatusGenericos.EnRevision;
                oInv.FechaCompletado = null;
                Datos.Guardar<InventarioLinea>(oInv);
            }

            // Se marcan como completado los inventarios ya concluidos, si hubiera
            foreach (var oReg in oInvConteos)
            {
                var oInvConteoV = Datos.GetEntity<InventarioLineasConteosView>(c => c.InventarioLineaID == oReg.InventarioLineaID);
                // Se valida si ya se completó el conteo
                if (oInvConteoV.PartesLinea > oInvConteoV.Conteo)
                {
                    continue;
                }
                else
                {
                    oReg.EstatusGenericoID = Cat.EstatusGenericos.Completada;
                    oReg.FechaCompletado = DateTime.Now;
                }

                Datos.Guardar<InventarioLinea>(oReg);
            }

            return new ResAcc();
        }