public static bool actualizarTarifa(DetallesHabitacion tur, Tarifa tarIni, DataGridViewRow dr) { Tarifa tarAct; DateTime now = DateTime.Now; int nroVuelta = 0; if (tarIni.hasta != DateTime.MinValue) { if (tarIni.hasta > now) { bitHasta[tur.nroHab] = true; tarAct = tarIni; bucle1(tur, tarAct, now, tarIni, dr); return true; } else { if (!bitHasta.ContainsKey(tur.nroHab) || bitHasta[tur.nroHab]) { bitHasta[tur.nroHab] = false; contPernocte[tur.nroHab] = 0; } return bucle0(tur, out tarAct, now, tarIni, dr); } } else // No { return bucle0(tur, out tarAct, now, tarIni, dr); } }
public static decimal calcularPrecioExtDesdeHasta(Tarifa tar, DateTime desde, DateTime hasta) { double precioTotal = 0; TimeSpan difMin = hasta - desde; double cantidadMinutos = difMin.TotalMinutes; if (tar.extensionPrecio != 0) { precioTotal = ((double)tar.extensionPrecio / tar.extension) * cantidadMinutos; } else { precioTotal = (double)tar.precioMinuto * cantidadMinutos; } return Convert.ToDecimal(precioTotal); }
public static Boolean Asignar(fPrincipal2 fPrincipal, int descuentoId, int nroHab, int pernocte, int catId, int conserjeId, int socioId, int puntos, decimal montoApagar,Tarifa tarifaNoche,decimal descTotalHabitacion,decimal impExtra) { try { SqlCommand comm; int dia = Calendario.nroDia(DateTime.Now); int diaAnt = Calendario.nroDiaAnt(DateTime.Now); if (pernocte == 0) { Tarifa tarActual = Tarifa.obtenerTarifaActual(catId, dia, diaAnt, DateTime.Now); Tarifa tarSig = Tarifa.obtenerTarifaActual(catId, dia, diaAnt, DateTime.Now.AddMinutes(tarActual.duracion)); decimal precioSumarContador = 0; if (tarSig.pernocte) { if (tarSig.desde < DateTime.Now.AddMinutes(tarActual.duracion)) // Si desde= 10:00 y hasta= 11:00 tengo que poner en el contador 1 hora en $$$ { decimal precioAux = tools.redondeo(Tarifa.obtenerPrecioDesdeHasta(tarActual, DateTime.Now, tarSig.desde)); precioSumarContador = tarActual.precio - precioAux; } } comm = new SqlCommand("Habitacion_Asignar", fPrincipal2.conn); comm.CommandType = CommandType.StoredProcedure; if (descuentoId != 0) comm.Parameters.AddWithValue("@descuentoId", descuentoId); comm.Parameters.AddWithValue("@nroHab", nroHab); comm.Parameters.AddWithValue("@catId", catId); comm.Parameters.AddWithValue("@dia", dia); comm.Parameters.AddWithValue("@diaAnt", diaAnt); comm.Parameters.AddWithValue("@pernocte", pernocte); comm.Parameters.AddWithValue("@conserjeId", conserjeId); comm.Parameters.AddWithValue("@contPernocte", precioSumarContador); if (socioId != 0) comm.Parameters.AddWithValue("@socioId", socioId); if (puntos > 0) comm.Parameters.AddWithValue("@puntos", puntos); } else { if (montoApagar == 0) { return false;// No se encontro tarifa } comm = new SqlCommand("Habitacion_AsignarTurnoNoche", fPrincipal2.conn); comm.CommandType = CommandType.StoredProcedure; comm.Parameters.AddWithValue("@nroHab", nroHab); comm.Parameters.AddWithValue("@catId", catId); comm.Parameters.AddWithValue("@tarifaId2", tarifaNoche.id); comm.Parameters.AddWithValue("@precioTotal", tarifaNoche.precio); comm.Parameters.AddWithValue("@precioExtras", impExtra); DateTime fHasta = DateTime.Now.Hour > tarifaNoche.hasta.Hour ? DateTime.Now.AddDays(1) : DateTime.Now; comm.Parameters.AddWithValue("@hasta", new DateTime(fHasta.Year, fHasta.Month, fHasta.Day, tarifaNoche.hasta.Hour, tarifaNoche.hasta.Minute, 0)); if (descuentoId != 0) comm.Parameters.AddWithValue("@descuentoId", descuentoId); comm.Parameters.AddWithValue("@conserjeId", conserjeId); if (socioId != 0) comm.Parameters.AddWithValue("@socioId", socioId); if (puntos > 0) comm.Parameters.AddWithValue("@puntos", puntos); if (descTotalHabitacion > 0) comm.Parameters.AddWithValue("@descTotalHabitacion", descTotalHabitacion); } comm.ExecuteNonQuery(); comm.CommandText = "UPDATE cierresCaja set cantTA = cantTA + 1 where hasta is null"; comm.Parameters.Clear(); comm.CommandType = CommandType.Text; comm.ExecuteNonQuery(); tools.actualizarListadoTurnos(fPrincipal.dataGridView1, fPrincipal.dataGridView2); return true; } catch (Exception ex) { LoggerProxy.Error(" Habitacion.CS , metodo: Asignar - " + ex.Message + " " + ex.StackTrace); return false; } }
public static decimal calcularPrecioTurno(int pernocte, decimal descuentoId,int puntos,int catId,out Tarifa tarifaNoche,out decimal totDescDinero,out decimal totExtra) { totDescDinero = 0; totExtra = 0; try { tarifaNoche = null; decimal precioTotal = 0; decimal impTurnoRedondeado = 0; SqlCommand comm; int dia; int diaAnt; dia= Calendario.nroDia(DateTime.Now); diaAnt = Calendario.nroDiaAnt(DateTime.Now); if (pernocte == 0) { comm = new SqlCommand("Habitacion_calcularPrecioAsignar", fPrincipal2.conn); comm.CommandType = CommandType.StoredProcedure; if (descuentoId != 0) comm.Parameters.AddWithValue("@descuentoId", descuentoId); comm.Parameters.AddWithValue("@catId", catId); comm.Parameters.AddWithValue("@dia", dia); comm.Parameters.AddWithValue("@diaAnt", diaAnt); comm.Parameters.AddWithValue("@pernocte", pernocte); if (puntos > 0) comm.Parameters.AddWithValue("@puntos", puntos); } else { precioTotal = Tarifa.calcularPrecioConPernocte(catId, out tarifaNoche); if (precioTotal == 0) { return 0;// No se encontro tarifa } impTurnoRedondeado = tools.redondeo(tarifaNoche.precio); totExtra = tools.redondeo(precioTotal - tools.redondeo(tarifaNoche.precio)); if (descuentoId == 0) return impTurnoRedondeado + totExtra - puntos; // no es necesario aplicar descuentos comm = new SqlCommand("Habitacion_calcularPrecioAsignarTurnoNoche", fPrincipal2.conn); comm.CommandType = CommandType.StoredProcedure; comm.Parameters.AddWithValue("@precioTotal", impTurnoRedondeado); comm.Parameters.AddWithValue("@precioExtras", totExtra); if (descuentoId != 0) comm.Parameters.AddWithValue("@descuentoId", descuentoId); if (puntos > 0) comm.Parameters.AddWithValue("@puntos", puntos); } DataSet ds = new DataSet(); SqlDataAdapter dataAdapter = new SqlDataAdapter(comm); dataAdapter.Fill(ds); decimal descFinal = Convert.ToDecimal(ds.Tables[0].Rows[0][1]); decimal impFinal = Convert.ToDecimal(ds.Tables[0].Rows[0][0]); decimal totPuntos = Convert.ToDecimal(ds.Tables[0].Rows[0][2]); totDescDinero = tools.redondeo(descFinal); return impFinal - totDescDinero - totPuntos; } catch (Exception ex) { tarifaNoche = null; LoggerProxy.Error(" Habitacion.CS , metodo: calcularPrecioAsignar - " + ex.Message + " " + ex.StackTrace); return 0; } }
public static Tarifa obtenerTarSiguiente(int catId, int diaAct, int diaSig, DateTime horaAct) { DataSet ds = new DataSet(); Tarifa tarifaSig; int diaAnt = Calendario.nroDiaAnt(horaAct); SqlDataAdapter dataAdapter = new SqlDataAdapter("tarifas_obtenerSiguiente", fPrincipal2.conn); dataAdapter.SelectCommand.Parameters.AddWithValue("@catId", catId); dataAdapter.SelectCommand.Parameters.AddWithValue("@dia", diaAct); dataAdapter.SelectCommand.Parameters.AddWithValue("@diaSig", diaSig); dataAdapter.SelectCommand.Parameters.AddWithValue("@hora", horaAct); dataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure; dataAdapter.Fill(ds); try { tarifaSig = new Tarifa(ds.Tables[ds.Tables.Count - 1].Rows[0]); if (tarifaSig.desde.Day == horaAct.Day) // Si es el mismo dia del mes { if (tarifaSig.desde.TimeOfDay < horaAct.TimeOfDay) // y la hora desde del sig es menor a la hora actual { tarifaSig.desde = tarifaSig.desde.AddDays(1); // pongo fecha de mañana. } } } catch (Exception ex) { if (ds.Tables[0].Rows.Count == 0) { LoggerProxy.Info("ActualizadorTarifa.obtenerTarSiguiente - No se encontro tarifa Siguiente. Datos: catId:" + catId + " hora:" + horaAct.ToString("yyyy-MM-dd HH:mm:ss")); } else LoggerProxy.Error("ActualizadorTarifa.obtenerTarSiguiente = " + ex.Message + " - " + ex.StackTrace); tarifaSig = null; } return tarifaSig; }
static void bucle4(bool sumCont, DetallesHabitacion tur, int nroHab, DateTime hora, Tarifa tar, DataGridViewRow dr) { decimal monto; Tarifa tarSig = obtenerTarSiguiente(tur.catId, Calendario.nroDia(DateTime.Now), Calendario.nroDiaSig(DateTime.Now), hora); if (tur.hasta.AddMinutes(tar.extension) > tarSig.desde) { monto = calcularPrecioExtDesdeHasta(tar, tur.hasta, tarSig.desde); tur.hasta = new DateTime(tur.hasta.Year, tur.hasta.Month, tur.hasta.Day, tarSig.desde.Hour, tarSig.desde.Minute, 0); } else { monto = tar.PrecioExtension(); tur.hasta = tur.hasta.AddMinutes(tar.extension); } monto = tools.redondeo(monto); tur.impHabitacion += monto; if (sumCont) contPernocte[nroHab] += monto; updateDetallesTurno(nroHab, monto, tur.hasta, contPernocte[nroHab], dr); }
private static void bucle1(DetallesHabitacion tur, Tarifa tarAct, DateTime now, Tarifa tar, DataGridViewRow dr) { decimal precioTotal = tools.redondeo(contPernocte[tur.nroHab] + tarAct.PrecioExtension()); if (precioTotal >= tarAct.precioTN) // Si { decimal montoAsumar = tools.redondeo(tarAct.precioTN - contPernocte[tur.nroHab]); tur.impHabitacion += montoAsumar; if (now.TimeOfDay > tarAct.hasta.TimeOfDay) tur.hasta = new DateTime(now.AddDays(1).Year, now.AddDays(1).Month, now.AddDays(1).Day, tarAct.hasta.Hour, tarAct.hasta.Minute,0); else tur.hasta = new DateTime(now.Year, now.Month, now.Day, tarAct.hasta.Hour, tarAct.hasta.Minute, 0); updateDetallesTurno(tur.nroHab, montoAsumar, tur.hasta, tarAct.precioTN, dr); contPernocte[tur.nroHab] = tarAct.precioTN; } else // No { bucle4(true, tur, tur.nroHab, now, tar, dr); } }
private static void bucle0(DetallesHabitacion tur, out Tarifa tarAct, DateTime now, Tarifa tar, DataGridViewRow dr) { tarAct = Tarifa.obtenerTarifaActual(tur.catId, Calendario.nroDia(now), Calendario.nroDiaAnt(now), now); if (tarAct.pernocte) // si { bucle1(tur, tarAct, now, tar, dr); } else // no { contPernocte[tur.nroHab] = 0; bucle4(false, tur, tur.nroHab, now, tarAct, dr); } }
public static Tarifa obtenerTarifaSiguiente(int catId, int diaAct, int diaSig, Tarifa tar, DateTime hora) { DataSet ds = new DataSet(); Tarifa tarifaSig; int diaAnt = Calendario.nroDiaAnt(hora); SqlDataAdapter dataAdapter = new SqlDataAdapter("tarifas_obtenerSiguiente", fPrincipal2.conn); dataAdapter.SelectCommand.Parameters.AddWithValue("@catId", catId); dataAdapter.SelectCommand.Parameters.AddWithValue("@dia", diaAct); dataAdapter.SelectCommand.Parameters.AddWithValue("@diaSig", diaSig); dataAdapter.SelectCommand.Parameters.AddWithValue("@hora", hora); dataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure; if (tar.hasta != DateTime.MinValue) { if (tar.hasta < hora )// Si hubo cruce de dias // REVISAR 2-7-2013 { diaAnt = diaAct; diaAct = Calendario.nroDia(hora.AddDays(1)); } Tarifa aux = obtenerTarifaActual(catId, diaAct, diaAnt, tar.hasta); if (aux.categoriaId == tar.categoriaId && aux.dia == tar.dia && aux.desde == tar.desde)// si es la misma { dataAdapter.Fill(ds); tarifaSig = new Tarifa(ds.Tables[ds.Tables.Count - 1].Rows[0]); if (tarifaSig.desde.Day == hora.Day) // Si es el mismo dia del mes { if (tarifaSig.desde.TimeOfDay < hora.TimeOfDay) // y la hora desde es menor a la hora actual { tarifaSig.desde = tarifaSig.desde.AddDays(1); // pongo fecha de mañana. } } return tarifaSig; } else return obtenerTarifaActual(catId, diaAct, diaAnt, tar.hasta); } try { dataAdapter.Fill(ds); tarifaSig = new Tarifa(ds.Tables[ds.Tables.Count-1].Rows[0]); if (tar.desde > tarifaSig.desde) // Si la fecha tarAnterior es mas actual que la siguiente , al asiguiente le sumo 1 dia. { tarifaSig.desde = tarifaSig.desde.AddDays(1); if(tarifaSig.hasta!= DateTime.MinValue) tarifaSig.hasta= tarifaSig.hasta.AddDays(1); } } catch (Exception ex) { if (ds.Tables[0].Rows.Count == 0) { log.Info("Tarifa.obtenerTarifaActual - No se encontro tarifa. Datos: SP:obtenerTarifaConId; catId:" + catId + " hora:" + hora.ToString("yyyy-MM-dd HH:mm:ss")); } else log.Error("Tarifa.obtenerTarifaActual = " + ex.Message + ex.StackTrace); tarifaSig = null; } return tarifaSig; }
public static Tarifa obtenerTarifaInicial(int nroHab,DateTime hora) { DataSet ds = new DataSet(); Tarifa tarifa = new Tarifa(); SqlDataAdapter dataAdapter = new SqlDataAdapter("tarifas_obtenerInicial", fPrincipal2.conn); dataAdapter.SelectCommand.Parameters.AddWithValue("@nroHab", nroHab); dataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure; try { dataAdapter.Fill(ds); if (ds.Tables[0].Rows.Count == 1) tarifa = new Tarifa(ds.Tables[0].Rows[0],hora); } catch (Exception ex) { LoggerProxy.Error(ex.Message + "-" + ex.StackTrace); } return tarifa; }
public static Tarifa obtenerTarifaActual(int catId, int dia, int diaAnt, DateTime hora) { DataSet ds = new DataSet(); Tarifa tarifa; SqlDataAdapter dataAdapter = new SqlDataAdapter("tarifas_obtenerActual", fPrincipal2.conn); dataAdapter.SelectCommand.Parameters.AddWithValue("@catId", catId); dataAdapter.SelectCommand.Parameters.AddWithValue("@dia", dia); dataAdapter.SelectCommand.Parameters.AddWithValue("@diaAnt", diaAnt); if (hora != DateTime.MinValue) dataAdapter.SelectCommand.Parameters.AddWithValue("@hora", hora); dataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure; try { dataAdapter.Fill(ds); if (ds.Tables[0].Rows.Count > 0) tarifa = new Tarifa(ds.Tables[0].Rows[0]); else tarifa = new Tarifa(ds.Tables[1].Rows[0]); if (tarifa.desde.Day == hora.Day) // Si es el mismo dia del mes { if (tarifa.desde.TimeOfDay > hora.TimeOfDay) // y la hora desde es mayor a la hora actual { tarifa.desde = tarifa.desde.AddDays(-1); // pongo fecha de ayer. } } } catch (Exception ex) { if (ds.Tables[0].Rows.Count == 0) { LoggerProxy.Error("Tarifa.obtenerTarifaActual - No se encontro tarifa. Datos: SP:obtenerTarifaConId; catId:" + catId + " hora:" + hora.ToString("yyyy-MM-dd HH:mm:ss")); } else log.Error("Tarifa.obtenerTarifaActual = " + ex.Message + ex.StackTrace); tarifa = null; } return tarifa; }
public static decimal obtenerPrecioXMinuto(Tarifa tarSig) { double precioMinutoExtension; if (tarSig.extensionPrecio != 0) { precioMinutoExtension = (double)tarSig.extensionPrecio / tarSig.extension; } else { precioMinutoExtension = (double)tarSig.precioMinuto; } return Convert.ToDecimal(precioMinutoExtension); }
public static decimal obtenerPrecioDesdeHasta(Tarifa tar, DateTime desde, DateTime hasta) { decimal precioTotal = 0; TimeSpan difMin = hasta - desde; double cantidadMinutos = difMin.TotalMinutes; if (difMin.TotalMinutes > (tar.duracion + tar.tolerancia)) { precioTotal += tar.precio; cantidadMinutos -= (tar.duracion + tar.tolerancia); precioTotal += (decimal)cantidadMinutos * obtenerPrecioXMinuto(tar); } else { precioTotal = (decimal)cantidadMinutos * tar.precioMinuto; } return precioTotal; }
//public decimal obtenerPrecioMinutos(Tarifa tar,DateTime desde,DateTime hasta) //{ // decimal precioMinutoExtension; // TimeSpan difMin = hasta - desde; // precioMinutoExtension = obtenerPrecioExtensiones(tar); // return precioMinutoExtension * (decimal)difMin.TotalMinutes; //} //public decimal obtenerPrecioExtensiones(Tarifa tarSig) //{ // double precioMinutoExtension; // if (tarSig.extensionPrecio != null) // { // precioMinutoExtension = (double)tarSig.extensionPrecio / tarSig.extension; // } // else // { // precioMinutoExtension = (double)tarSig.precioMinuto; // } // return Convert.ToDecimal(precioMinutoExtension); //} public static decimal calcularPrecioConPernocte(int catId, out Tarifa tarifaNoche) { DateTime hora = DateTime.Now; Tarifa tarSig; decimal precioTotal = 0; int dia = Calendario.nroDia(hora); int diaSig = Calendario.nroDiaSig(hora); int diaAnt = Calendario.nroDiaAnt(hora); Tarifa tar = obtenerTarifaActual(catId, dia, diaAnt, hora); if (tar == null)// no se encontro tarifa { tarifaNoche = null; return 0; } if (tar.pernocte) { tarifaNoche = tar; return tar.precioTN; } while (true) { int contadorOverflow = 0; tarSig = Tarifa.obtenerTarifaSiguiente(catId, dia, diaSig, tar, hora); if (tarSig.pernocte) { decimal precioAux = Tarifa.obtenerPrecioDesdeHasta(tar, hora, tarSig.desde); // 16-7-2013 Un bug, cuando hay hasta y es diferente de desde del sigueinte calcula mal if (tar.hasta != DateTime.MinValue && precioAux > tar.precioTN) { decimal precioAux2 = 0; precioAux = tar.precioTN; if (tar.hasta < tarSig.desde)// si el hasta es menor al desde del turno noche obtengo la tar actual { Tarifa tarAux2 = obtenerTarifaActual(catId, Calendario.nroDia(tar.hasta), Calendario.nroDiaAnt(tar.hasta), tar.hasta); precioAux2 = Tarifa.obtenerPrecioDesdeHasta(tarAux2, tar.hasta, tarSig.desde); precioAux2 = precioAux2 > 0 ? precioAux2 : 0; } precioAux += precioAux2; } precioTotal += precioAux; precioTotal += tarSig.precioTN; tarifaNoche = tarSig; return precioTotal; } //Calcular precio teniendo en cuenta condiciones if (tar.hasta != DateTime.MinValue) { decimal precioAux2 = obtenerPrecioDesdeHasta(tar, hora, tar.hasta); if (precioAux2 > tar.precioTN) precioAux2 = tar.precioTN; precioTotal += precioAux2; hora = tar.hasta; } else { precioTotal = obtenerPrecioDesdeHasta(tar, hora, tarSig.desde); hora = tarSig.desde; } tar = tarSig; contadorOverflow++; if (contadorOverflow > 50) { tarifaNoche = null; return 0; } //////////////////////////////////////////////////////////////////// } }
private static void bucle1(DetallesHabitacion tur, Tarifa tarAct, DateTime now, Tarifa tar, DataGridViewRow dr) { decimal precioTotal = tools.redondeo(contPernocte[tur.nroHab] + tarAct.PrecioExtension()); if (precioTotal >= tarAct.precioTN) // Si supero el precio turno noche { decimal montoAsumar = tools.redondeo(tarAct.precioTN - contPernocte[tur.nroHab]); tur.impHabitacion += montoAsumar; tur.hasta = tarAct.hasta; updateDetallesTurno(tur.nroHab, montoAsumar, tur.hasta, tarAct.precioTN, dr); contPernocte[tur.nroHab] = tarAct.precioTN; } else // No { bucle4(true, tur, tur.nroHab, now, tarAct, dr); } }