using System; using System.ComponentModel; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using static bdGrupoSanchoToro.db.productos; namespace bdGrupoSanchoToro.db { public partial class detallesalbaranes { private double? _UnidadesRecogidasTmp; [NotMapped] public double? UnidadesRecogidasTmp { get { if (_UnidadesRecogidasTmp.HasValue == false) _UnidadesRecogidasTmp = Cantidad; return _UnidadesRecogidasTmp; } set { _UnidadesRecogidasTmp = value; } } [NotMapped] public string Producto { get { return this.idProductoNavigation.Descripcion; } } public string NumeroAlbaran { get { return this.idAlbaranNavigation.NumeroAlbaran; } } public DateOnly FechaAlbaran { get { return this.idAlbaranNavigation.Fecha; } } public string AlmacenOrigen { get { if (this.idAlbaranNavigation.idAlmacenOrigen.HasValue) { return this.idAlbaranNavigation.idAlmacenOrigenNavigation.Descripcion; } else { return ""; } } } public string AlmacenDestino { get { if (idAlbaranNavigation.idAlmacenDestino.HasValue) { return idAlbaranNavigation.idAlmacenDestinoNavigation.Descripcion; } else { return ""; } } } public string Entidad { get { return this.idAlbaranNavigation.Entidad; } } public void ActualizaProducto(bdGrupoSanchoToro.tscGrupoSanchoToro bd, albaranes.TipoAlbaranEnum Tipo, int Factor,int Empresa) { try { var pr = bd.productos.First(x => x.idProducto == this.idProducto); if (pr.Tipo < (int)TipoProductoEnum.SERVICIO ) { almacenes almo; almacenes almd; if (Tipo==albaranes.TipoAlbaranEnum.RECOGIDA || Tipo==albaranes.TipoAlbaranEnum.DEVOLUCION_SUBALQUILER) { almo = this.idAlbaranRecogidaNavigation.idAlmacenOrigen.HasValue ? bd.almacenes.First(x => x.idAlmacen == idAlbaranRecogidaNavigation.idAlmacenOrigen) : (almacenes)null; almd = this.idAlbaranRecogidaNavigation.idAlmacenDestino.HasValue ? bd.almacenes.First(x => x.idAlmacen == this.idAlbaranRecogidaNavigation.idAlmacenDestino) : (almacenes)null; // Tipo = (albaranes.TipoAlbaranEnum)this.idAlbaranRecogidaNavigation.Tipo; } else { almo = this.idAlbaranNavigation.idAlmacenOrigen.HasValue ? bd.almacenes.First(x => x.idAlmacen == idAlbaranNavigation.idAlmacenOrigen) : (almacenes)null; almd = this.idAlbaranNavigation.idAlmacenDestino.HasValue ? bd.almacenes.First(x => x.idAlmacen == this.idAlbaranNavigation.idAlmacenDestino) : (almacenes)null; // Tipo = (albaranes.TipoAlbaranEnum)this.idAlbaranNavigation.Tipo; } switch (Tipo) { case albaranes.TipoAlbaranEnum.COMPRA: { this.ActStockPorAlmacen(bd, Factor, almd.idAlmacen, pr.idProducto); pr.UnidadesCompradas += this.Cantidad * (double)Factor; pr.ActualizaUnidades(TipoUnidadesEnum.COMPRADAS, Empresa, this.Cantidad * (double)Factor); this.ActStockGlobal(bd, pr, (almacenes.TipoAlmacenEnum)almd.Tipo, true, Factor, Empresa); break; } case albaranes.TipoAlbaranEnum.FABRICACION: case albaranes.TipoAlbaranEnum.REGULARIZACION_STOCK: { this.ActStockPorAlmacen(bd, Factor, almd.idAlmacen, pr.idProducto); pr.UnidadesInicialesOFabricadas += this.Cantidad * (double)Factor; pr.ActualizaUnidades(TipoUnidadesEnum.INICIALES_O_FABRICADAS, Empresa, this.Cantidad * (double)Factor); this.ActStockGlobal(bd, pr, (almacenes.TipoAlmacenEnum)almd.Tipo, true, Factor, Empresa); break; } case albaranes.TipoAlbaranEnum.CAMBIO_ALMACEN: { this.ActStockPorAlmacen(bd, Factor * -1, almo.idAlmacen, pr.idProducto); this.ActStockGlobal(bd, pr, (almacenes.TipoAlmacenEnum)almo.Tipo, false, Factor * -1, Empresa); this.ActStockPorAlmacen(bd, Factor, almd.idAlmacen, pr.idProducto); this.ActStockGlobal(bd, pr, (almacenes.TipoAlmacenEnum)almd.Tipo, false, Factor, Empresa); break; } case albaranes.TipoAlbaranEnum.ENTREGA: { this.ActStockPorAlmacen(bd, Factor * -1, almo.idAlmacen, pr.idProducto); this.ActStockGlobal(bd,pr, (almacenes.TipoAlmacenEnum)almo.Tipo, this.EsVenta, Factor * -1, Empresa); if (this.EsVenta == false) { pr.UnidadesAlquiladas += this.Cantidad * (double)Factor; pr.ActualizaUnidades(TipoUnidadesEnum.ALQUILADAS, Empresa, this.Cantidad * (double)Factor); } else { pr.UnidadesVendidas += this.Cantidad * (double)Factor; pr.ActualizaUnidades(TipoUnidadesEnum.VENDIDAS, Empresa, this.Cantidad * (double)Factor); } break; } case albaranes.TipoAlbaranEnum.RECOGIDA: { this.ActStockPorAlmacen(bd, Factor, almd.idAlmacen, pr.idProducto); this.ActStockGlobal(bd,pr, (almacenes.TipoAlmacenEnum)almd.Tipo, false, Factor, Empresa); pr.UnidadesAlquiladas += this.Cantidad * (double)Factor * (double)-1; pr.ActualizaUnidades(TipoUnidadesEnum.ALQUILADAS, Empresa, this.Cantidad * (double)Factor * (double)-1); break; } case albaranes.TipoAlbaranEnum.SUBALQUILER: { this.ActStockPorAlmacen(bd, Factor, almd.idAlmacen, pr.idProducto); this.ActStockGlobal(bd,pr, (almacenes.TipoAlmacenEnum)almd.Tipo, true, Factor, Empresa); pr.UnidadesSubAlquiladas += this.Cantidad * (double)Factor; pr.ActualizaUnidades(TipoUnidadesEnum.SUBALQUILADAS, Empresa, this.Cantidad * (double)Factor); break; } case albaranes.TipoAlbaranEnum.DEVOLUCION_SUBALQUILER: { this.ActStockPorAlmacen(bd, Factor * -1, almo.idAlmacen, pr.idProducto); this.ActStockGlobal(bd,pr, (almacenes.TipoAlmacenEnum)almo.Tipo, true, Factor * -1, Empresa); pr.UnidadesSubAlquiladas += this.Cantidad * (double)Factor * (double)-1; pr.ActualizaUnidades(TipoUnidadesEnum.SUBALQUILADAS, Empresa, this.Cantidad * (double)Factor * (double)-1); break; } } bd.GuardarCambios(); } } catch (Exception ex) { throw new Exception(ex.Message, ex); } } private void ActStockPorAlmacen(bdGrupoSanchoToro.tscGrupoSanchoToro bd, int Factor, int idAlmacen, int idProducto) { try { var st = bd.stocks.FirstOrDefault(x => x.idProducto == idProducto && x.idAlmacen == idAlmacen); if (st is null) { st = new stocks(); st.idProducto = idProducto; st.idAlmacen = idAlmacen; st.Unidades = 0d; bd.stocks.Add(st); } st.Unidades += this.Cantidad * (double)Factor; bd.GuardarCambios(); } catch (Exception ex) { throw new Exception(ex.Message, ex); } } private void ActStockGlobal(bdGrupoSanchoToro.tscGrupoSanchoToro bd, productos pr, almacenes.TipoAlmacenEnum TipoAlmacen, bool ActTotalUnidades, int Factor,int Empresa) { try { switch (TipoAlmacen) { // Case almacenes.TipoAlmacenEnum.ALMACEN case almacenes.TipoAlmacenEnum.TALLER_REPARACIONES: { pr.UnidadesAveriadas += this.Cantidad * (double)Factor; break; } case almacenes.TipoAlmacenEnum.UNIDADES_DESCARTADAS: { pr.UnidadesDesechadas += this.Cantidad * (double)Factor; break; } } if (ActTotalUnidades) { pr.TotalUnidades += this.Cantidad * (double)Factor; pr.ActualizaUnidades(TipoUnidadesEnum.TOTAL, Empresa, this.Cantidad * (double)Factor); } bd.GuardarCambios(); } catch (Exception ex) { throw new Exception(ex.Message, ex); } } } }