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()); }
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(); }
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(); }