private async void CargarBono() { try { if (string.IsNullOrEmpty(Settings.UrlConexionActual)) { await Application.Current.MainPage.DisplayAlert( "Alerta", "Dispositivo no configurado", "Aceptar"); return; } Response con = await apiService.CheckConnection(Settings.UrlConexionActual); if (!con.IsSuccess) { string UrlDistinto = Settings.UrlConexionActual == Settings.UrlConexionExterna ? Settings.UrlConexionInterna : Settings.UrlConexionExterna; con = await apiService.CheckConnection(UrlDistinto); if (!con.IsSuccess) { await Application.Current.MainPage.DisplayAlert( "Alerta", con.Message, "Aceptar"); return; } else { Settings.UrlConexionActual = UrlDistinto; } } var response_cs = await apiService.GetObject <BonoModel>(Settings.UrlConexionActual, Settings.RutaCarpeta, "Bono", "BARCO=" + Settings.Sucursal + "&VIAJE=" + Settings.Viaje); if (!response_cs.IsSuccess) { await Application.Current.MainPage.DisplayAlert( "Alerta", response_cs.Message, "Aceptar"); return; } Bono = (BonoModel)response_cs.Result; } catch (System.Exception ex) { await Application.Current.MainPage.DisplayAlert( "Alerta", ex.Message, "Aceptar"); return; } }
public BonoModel GET(string BARCO = "", string VIAJE = "") { try { BonoModel Bono = new BonoModel { OPCION1 = "ASIGNACION DE ORDENES", OPCION2 = "CUMPLIMIENTO RAPIDO", OPCION3 = "CALIFICACION DE OBRAS CUMPLIDAS", OPCION4 = "COMISION GLOBAL", OPCION3_VERDE = "(+) Bien hechas", OPCION3_AZUL = "(-) Hechas a medias", OPCION3_ROJO = "(-) No realizada" }; var bitacora = db.VW_BITACORAS_APP.Where(q => q.BARCO == BARCO && q.VIAJE == VIAJE).FirstOrDefault(); if (bitacora == null) { return(Bono); } Bono.ID = bitacora.ID; Bono.BARCO = bitacora.NOM_BARCO; Bono.VIAJE = bitacora.NOM_VIAJE; Bono.FECHA_ARRIBO = bitacora.FECHA_ARRIBO ?? DateTime.Now.Date; Bono.FECHA_ZARPE = bitacora.FECHA_ZARPE ?? DateTime.Now.Date; Bono.FECHA_ZARPE_REAL = bitacora.FECHA_ZARPE_REAL ?? DateTime.Now.Date; var param = db.CAB_BITACORA_PARAM.Where(q => q.ID == bitacora.ID).FirstOrDefault(); if (param == null) { return(Bono); } #region Opción 1 var dias = (Bono.FECHA_ARRIBO - Bono.FECHA_ZARPE).Value.TotalDays; var lst = db.VW_BITACORAS_APP.Where(q => q.ID == bitacora.ID && q.FECHA_OT != null && !q.DESCRIPCION.Contains("REASIGNADA")).GroupBy(q => new { q.NUMERO_ORDEN, q.FECHA_ARRIBO, q.FECHA_OT }).ToList(); var premio_op1 = lst.Where(q => (double)param.OP1_INICIO <= (q.Key.FECHA_ARRIBO - q.Key.FECHA_OT).Value.TotalDays && (q.Key.FECHA_ARRIBO - q.Key.FECHA_OT).Value.TotalDays <= (double)param.OP1_FIN).Select(q => new { Dias = (q.Key.FECHA_ARRIBO - q.Key.FECHA_OT).Value.TotalDays, Orden = q.Key.NUMERO_ORDEN }).ToList(); var multa_op1 = lst.Where(q => (double)param.OP1_INICIO > (q.Key.FECHA_ARRIBO - q.Key.FECHA_OT).Value.TotalDays || (q.Key.FECHA_ARRIBO - q.Key.FECHA_OT).Value.TotalDays > (double)param.OP1_FIN).Select(q => new { Dias = (q.Key.FECHA_ARRIBO - q.Key.FECHA_OT).Value.TotalDays, Orden = q.Key.NUMERO_ORDEN }).ToList(); Bono.OP2_CAN_PREMIO = premio_op1.Count; Bono.OP2_CAN_MULTA = (int)multa_op1.Sum(q => q.Dias); Bono.OP1_PREMIO = premio_op1.Count * param.OP1_PREMIO; Bono.OP1_MULTA = (decimal)multa_op1.Sum(q => q.Dias) * param.OP1_MULTA; #endregion #region Opción 2 decimal premio_op2 = db.DET_BITACORA.AsEnumerable().Where(q => q.ID == bitacora.ID && q.LINEA_FECCUMPLI1 != null && param.OP2_INICIO <= (bitacora.FECHA_ZARPE.Value.Date - q.LINEA_FECCUMPLI1.Value.Date).Days && (bitacora.FECHA_ZARPE.Value.Date - q.LINEA_FECCUMPLI1.Value.Date).Days <= param.OP2_FIN).Count(); Bono.OP2_PREMIO = premio_op2 * param.OP2_PREMIO; #endregion #region Opcion 3 decimal TotalObras = db.DET_BITACORA.Where(q => q.ID == bitacora.ID && q.LINEA_STCUMPLI2 != null && !q.DESCRIPCION.Contains("REASIGNADA")).Count(); decimal op3_verde = db.DET_BITACORA.Where(q => q.ID == bitacora.ID && q.LINEA_STCUMPLI2 == "P").Count(); Bono.OPCION3_VERDE += "(" + op3_verde.ToString() + "):"; decimal op3_azul = db.DET_BITACORA.Where(q => q.ID == bitacora.ID && q.LINEA_STCUMPLI2 == "T").Count(); Bono.OPCION3_AZUL += "(" + op3_azul.ToString() + "):"; decimal op3_rojo = db.DET_BITACORA.Where(q => q.ID == bitacora.ID && q.LINEA_STCUMPLI2 == "X").Count(); Bono.OPCION3_ROJO += "(" + op3_rojo.ToString() + "):"; decimal ValorPorObra = Math.Round(param.OP3_TOTAL / TotalObras, 2, MidpointRounding.AwayFromZero); param.OP3_ROJO = param.OP3_ROJO ?? 0; Bono.OP3_VERDE = Math.Round(ValorPorObra * op3_verde, 2, MidpointRounding.AwayFromZero); Bono.OP3_AZUL = Math.Round(Convert.ToDecimal(((double)param.OP3_TOTAL * ((double)param.OP3_AZUL / 100.00))) * op3_azul, 2, MidpointRounding.AwayFromZero); Bono.OP3_ROJO = Math.Round(Convert.ToDecimal(((double)param.OP3_TOTAL * ((double)param.OP3_ROJO / 100.00))) * op3_rojo, 2, MidpointRounding.AwayFromZero); #endregion #region Opcion 4 var HorasOP4 = (Bono.FECHA_ZARPE_REAL - Bono.FECHA_ZARPE).Value.TotalHours; //Valido que sean 24 horas var DiasOP4 = Convert.ToDecimal(Math.Truncate(HorasOP4 / 24)); var OP4 = db.CAB_BITACORA_PARAM_OP4.Where(q => q.ID == bitacora.ID && q.OP4_INI <= DiasOP4 && DiasOP4 <= q.OP4_FIN).FirstOrDefault(); if (OP4 != null) { //Resto el porcentaje que salga if (OP4.OP4_POR != null) { Bono.OP4_PREMIO = param.OP4_COMISION - Convert.ToDecimal((Convert.ToDouble(OP4.OP4_POR) / 100.00) * Convert.ToDouble(param.OP4_COMISION)); Bono.OP2_PREMIO = Bono.OP2_PREMIO - Convert.ToDecimal((Convert.ToDouble(OP4.OP4_POR) / 100.00) * Convert.ToDouble(Bono.OP2_PREMIO)); } //Sumo el valor que tenga parametrizado else if (OP4.OP4_VALOR != null) { Bono.OP4_PREMIO = Convert.ToDecimal(param.OP4_COMISION + (OP4.OP4_VALOR ?? 0)); Bono.OP2_PREMIO = Bono.OP2_PREMIO + (OP4.OP4_VALOR ?? 0); } else { Bono.OP4_PREMIO = param.OP4_COMISION; } } #endregion Bono.OP1_MULTA = Math.Abs(Bono.OP1_MULTA); Bono.TOTAL = Bono.OP1_PREMIO - Bono.OP1_MULTA + Bono.OP2_PREMIO + Bono.OP3_VERDE - Bono.OP3_AZUL - Bono.OP3_ROJO + Bono.OP4_PREMIO; Bono.FECHA_ARRIBO = bitacora.FECHA_ARRIBO; Bono.FECHA_ZARPE = bitacora.FECHA_ZARPE; Bono.FECHA_ZARPE_REAL = bitacora.FECHA_ZARPE_REAL; Bono.COLOR = Bono.TOTAL > 0 ? "Green" : (Bono.TOTAL == 0 ? "Black" : "Red"); return(Bono); } catch (Exception ex) { using (EntitiesGeneral Error = new EntitiesGeneral()) { long ID = Error.APP_LOGERROR.Count() > 0 ? (Error.APP_LOGERROR.Select(q => q.SECUENCIA).Max() + 1) : 1; Error.APP_LOGERROR.Add(new APP_LOGERROR { ERROR = ex == null ? string.Empty : (ex.Message.Length > 1000 ? ex.Message.Substring(0, 1000) : ex.Message), INNER = ex.InnerException == null ? string.Empty : (ex.InnerException.Message.Length > 1000 ? ex.InnerException.Message.Substring(0, 1000) : ex.InnerException.Message), FECHA = DateTime.Now, PROCESO = "Bono/GET", SECUENCIA = ID }); Error.SaveChanges(); } return(new BonoModel()); } }