public ActionResult Delete(int id) { var sda = new ShipDataAccess(context); sda.Delete(sda.getById(id)); return(RedirectToAction("List")); }
public static void ChangeShipStatus(ShipStatus status, Ship ship) { using (var sda = new ShipDataAccess()) { sda.ChangeShipStatus(status, ship); } }
public DataSet GetPositionsOnStandingOrder() { using (var sqlconn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["mio"].ConnectionString)) { sqlconn.Open(); var dsout = new DataSet(); var dt = new DataTable(); var pos = new SqlGeography(); ShipDataAccess sda = null; StandingOrderDataAccess soda = null; using (var da = new SqlDataAdapter("SELECT * FROM AIS", sqlconn)) { da.Fill(dt); } dt.Columns.Add("LATITUD", typeof(Decimal)); dt.Columns.Add("LONGITUD", typeof(Decimal)); foreach (DataRow row in dt.Rows) { try { sda = new ShipDataAccess(); soda = new StandingOrderDataAccess(); var spman = new ShipPositionManager(); var ddpman = new DDPVersionManager(); var ddpver = ddpman.GetCurrentDDPVersion(); var lastpos = spman.GetLastShipPosition(sda.getById((int)row["ID_BARCO"]).IMONum); List <StandingOrder> so = new List <StandingOrder>(); if (lastpos != null) { so = soda.GetOrdersForPosition(lastpos, ddpver); } if (so.Count == 0) { dt.Rows.Remove(row); continue; } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); } finally { sda.Dispose(); soda.Dispose(); } pos = SqlGeography.STGeomFromWKB(new SqlBytes((byte[])row["Position"]), 4326); row["LATITUD"] = decimal.Parse(pos.Lat.ToString()); row["LONGITUD"] = decimal.Parse(pos.Long.ToString()); } dt.Columns.Remove("Position"); dsout.Tables.Add(dt); return(dsout); } }
// // GET: /Ship/ public ActionResult List() { var sda = new ShipDataAccess(context); ViewData["barcos"] = sda.GetAll(); return(View()); }
/// <summary> /// Obtiene un barco en base a un numero IMO. /// </summary> /// <param name="IMONum">numero IMO del barco a buscar</param> /// <returns>Referencia al barco</returns> static public Ship getByIMONum(string IMONum) { using (var sda = new ShipDataAccess()) { return(sda.getByIMONum(IMONum)); } }
public ActionResult Edit(int id) { var sda = new ShipDataAccess(context); ViewData["shipid"] = id; return(View("New", sda.getById(id))); }
static public Ship getByMobileNum(string mobile) { using (var sda = new ShipDataAccess()) { return(sda.getByMobileNum(mobile)); } }
static public Ship getByMemberNum(int member) { using (var sda = new ShipDataAccess()) { return(sda.getByMemberNum(member)); } }
internal static Ship getByISN(string p) { using (var sda = new ShipDataAccess()) { return(sda.getByISN(p)); } }
public static string GetShipStatus(Ship ship) { using (var sda = new ShipDataAccess()) { return(sda.GetShipStatus(ship)); } }
public string GetShipState(Ship ship) { ShipDataAccess sda = null; StandingOrderDataAccess soda = null; try { sda = new ShipDataAccess(); soda = new StandingOrderDataAccess(); var spman = new ShipPositionManager(); var ddpman = new DDPVersionManager(); var ddpver = ddpman.GetCurrentDDPVersion(); var lastpos = spman.GetLastShipPosition(ship.IMONum); List <StandingOrder> so = new List <StandingOrder>(); if (lastpos != null) { so = soda.GetOrdersForPosition(lastpos, ddpver); } if (so.Count != 0) { return("blue"); } if (sda.HasActiveRequest(ship) != 0) { return("green"); } if (lastpos != null) { if (DateTime.UtcNow - lastpos.TimeStamp > TimeSpan.FromDays(1)) { return("red"); } } return("normal"); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); return("normal"); } finally { if (sda != null) { sda.Dispose(); } if (soda != null) { soda.Dispose(); } } }
/// <summary> /// Procesa un mensaje de tipo SARSurpicRequest. /// </summary> /// <param name="msg">Mensaje SARSURPICRequest</param> public void ProcessSARSURPICRequest(SARSURPICType SARSURPICRequest) { var configMgr = new ConfigurationManager(); var shipPositionManager = new ShipPositionManager(); List <ShipPosition> shipPositions; if (SARSURPICRequest.ItemElementName == DataCenterLogic.DataCenterTypes.ItemChoiceType1.SARCircularArea) { shipPositions = shipPositionManager.GetLastPositionsInCircularArea(SARSURPICRequest.Item, int.Parse(SARSURPICRequest.NumberOfPositions)); } else { shipPositions = shipPositionManager.GetLastPositionsInRectangularArea(SARSURPICRequest.Item, int.Parse(SARSURPICRequest.NumberOfPositions)); } if (shipPositions.Count == 0) { DataCenterTypesIDE.ReceiptType receipt = new DataCenterLogic.DataCenterTypesIDE.ReceiptType(); receipt.DDPVersionNum = DDPVersionManager.currentDDP(); receipt.Destination = SARSURPICRequest.DataUserRequestor; receipt.Message = "No positions"; receipt.MessageId = MessageIdManager.Generate(); receipt.MessageType = DataCenterLogic.DataCenterTypesIDE.messageTypeType3.Item7; receipt.Originator = "1005"; receipt.ReceiptCode = DataCenterLogic.DataCenterTypesIDE.receiptCodeType.Item7; receipt.ReferenceId = SARSURPICRequest.MessageId; receipt.schemaVersion = decimal.Parse(configMgr.Configuration.SchemaVersion); receipt.test = DataCenterLogic.DataCenterTypesIDE.testType.Item1; receipt.TimeStamp = DateTime.UtcNow; //Receipt sent Message msgout = new Message(receipt); msgout.Label = "receipt"; QueueManager.Instance().EnqueueOut(msgout); } else { using (var shipdao = new ShipDataAccess()) { var sprm = new ShipPositionReportManager(); foreach (ShipPosition shipPos in shipPositions) { sprm.SendReport(SARSURPICRequest.DataUserRequestor, shipPos, SARSURPICRequest.MessageId, DataCenterLogic.DataCenterTypesIDE.responseTypeType.Item4, DataCenterLogic.DataCenterTypesIDE.messageTypeType.Item3); } } } using (var dao = new SARSURPICRequestDataAccess()) { dao.Create(TypeHelper.Map2DB(SARSURPICRequest), 0); } log.Info("SARSURPICRequest successfully processed"); }
public void CheckShipStatus() { var sda = new ShipDataAccess(); List <Ship> ships = sda.GetAllBle(); foreach (var ship in ships) { log.Debug("Hay barcos con respuesta demorada"); ReprogramShip(ship); } }
public void SendReport(string requestor, ShipPosition position, string referenceId, DataCenterTypesIDE.responseTypeType responseType, DataCenterLogic.DataCenterTypesIDE.messageTypeType messageType) { //Configuracion del datacenter var configMgr = new ConfigurationManager(); //DataCenterTypesIDE.responseTypeType responseType = getResponseTypeFromRequest(spr); //DataCenterLogic.DataCenterTypesIDE.messageTypeType messageType = getMessageTypeFromRequest(spr); //Obtengo el ship al que pertenece la posicion using (var shipdao = new ShipDataAccess()) { Ship ship = shipdao.getById(position.ShipId); var shipPosReport = new DataCenterTypesIDE.ShipPositionReportType(); var point = SqlGeography.STPointFromWKB(new System.Data.SqlTypes.SqlBytes(position.Position.ToArray()), 4326); shipPosReport.ASPId = configMgr.Configuration.ASPId; shipPosReport.DataUserProvider = "1005"; //if( responseType == DataCenterLogic.DataCenterTypesIDE.responseTypeType.Item4 ) // shipPosReport.DataUserProvider = "3005"; shipPosReport.DataUserRequestor = requestor; shipPosReport.DCId = configMgr.Configuration.DataCenterID; shipPosReport.DDPVersionNum = DDPVersionManager.currentDDP(); shipPosReport.IMONum = ship.IMONum; shipPosReport.Latitude = WGS84LatFormat(point.Lat.Value); shipPosReport.Longitude = WGS84LongFormat(point.Long.Value); shipPosReport.MessageId = MessageIdManager.Generate(); shipPosReport.MessageType = messageType; shipPosReport.MMSINum = ship.MMSINum; shipPosReport.ReferenceId = referenceId; shipPosReport.ResponseType = responseType; shipPosReport.schemaVersion = decimal.Parse(configMgr.Configuration.SchemaVersion); shipPosReport.ShipborneEquipmentId = ship.EquipID; shipPosReport.ShipName = ship.Name; shipPosReport.test = DataCenterLogic.DataCenterTypesIDE.testType.Item1; shipPosReport.TimeStamp1 = position.TimeStamp; shipPosReport.TimeStamp2 = position.TimeStampInASP; shipPosReport.TimeStamp3 = position.TimeStampOutASP; shipPosReport.TimeStamp4 = position.TimeStampInDC; shipPosReport.TimeStamp5 = DateTime.UtcNow; log.Debug("Enqueing Report for ship: " + shipPosReport.IMONum + " Pos. Long. Lat.:" + shipPosReport.Longitude + " " + shipPosReport.Latitude + " Requestor: " + shipPosReport.DataUserRequestor); QueueManager.Instance().EnqueueOut(shipPosReport, "shipPositionReport"); } }
public bool HasActiveRequest(Ship ship) { ShipDataAccess sda = null; ShipPositionRequestDataAccess sprda = null; try { sda = new ShipDataAccess(); sprda = new ShipPositionRequestDataAccess(); var sprs = sda.GetAllRequestsForShip(ship); foreach (var spr in sprs) { if (sprda.GetActiveShipPositionRequest(spr) != null) { return(true); } } return(false); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex); return(false); } finally { if (sda != null) { sda.Dispose(); } if (sprda != null) { sprda.Dispose(); } } }
public ActionResult Index() { if (User.IsInRole("ExternoVerificarFacturas")) { return(RedirectToAction("List", "ExternalInvoice")); } if (User.IsInRole("Facturador")) { return(RedirectToAction("List", "Contract")); } // Barcos var sda = new ShipDataAccess(context); var sman = new ShipManager(); var spman = new ShipPositionManager(); var asprda = new ActiveShipPositionRequestDataAccess(context); List <Ship> barcos = sda.GetAll(); string[] latlong = { "N/A", "N/A" }; int i = 0; foreach (Ship barco in barcos) { ViewData[string.Format("State{0}", i)] = "normal"; //sman.GetShipState(barco); DataCenterDataAccess.ShipPosition LastPos = spman.GetLastShipPosition(barco.IMONum); if (LastPos == null) { latlong[0] = "N/A"; latlong[1] = "N/A"; } else { latlong = spman.GetLatLongOfPoint(LastPos); } ViewData[string.Format("Nombre{0}", i)] = barco.Name.ToString(); ViewData[string.Format("OMIId{0}", i)] = barco.IMONum.ToString(); if (LastPos != null) { string temp = latlong[0].Length > 6 ? latlong[0].Remove(6) : latlong[0]; string temp2 = latlong[1].Length > 6 ? latlong[1].Remove(6) : latlong[1]; ViewData[string.Format("UltimaPosicion{0}", i)] = "Lat: " + temp + " Long: " + temp2; ViewData[string.Format("Fecha{0}", i)] = LastPos.TimeStamp.ToString(); } else { ViewData[string.Format("UltimaPosicion{0}", i)] = "Lat: N/A Long: N/A"; ViewData[string.Format("Fecha{0}", i)] = "N/A"; } i++; } ViewData["total_barcos"] = i; //ViewData["total_barcos"] = 0; //Status int status, aspStatus; TimeSpan since, aspSince; var ssman = new SystemStatusManager(); /* * ssman.getLastStatus(out status, out since); * ssman.GetLastAspStatus(out aspStatus, out aspSince); * * ViewData["IDEStatus"] = status; * ViewData["IDESince"] = since; * ViewData["DDPStatus"] = status; * ViewData["DDPSince"] = since; * ViewData["ASPStatus"] = aspStatus; * ViewData["ASPSince"] = aspSince; * * ViewData["AsprCount"] = asprda.Count(); * * // Tráfico * * var tman = new TrafficManager(); * var ts = tman.GetTrafficStats(); * * ViewData["InMonth"] = ts.InMonth; * ViewData["InWeek"] = ts.InWeek; * ViewData["InDay"] = ts.InDay; * ViewData["OutMonth"] = ts.OutMonth; * ViewData["OutWeek"] = ts.OutWeek; * ViewData["OutDay"] = ts.OutDay; */ return(View()); }
/// <summary> /// Esta es la funcion principal del manejador de pedidos activos. /// Itera y procesa todos los pedidos activo. /// Es encargada de enviar (cuando se cumplan las condiciones) los mensajes a la cola de salida. /// </summary> public void Process(int hour, int mins) //hora: 0-23, minutes={0, 15, 30, 45} { //log.Info("Procesando Active Ship Position Request"); using (var asprda = new ActiveShipPositionRequestDataAccess()) { List <ActiveShipPositionRequest> asprlist = asprda.GetAll(); foreach (ActiveShipPositionRequest aspr in asprlist) { try { //Verifica si el tiempo de inicio ya paso var spm = new ShipPositionManager(); var spr = aspr.ShipPositionRequest; DateTime UtcNow = DateTime.UtcNow; //log.Debug("Verificando estado del ASPR"); if (aspr.Status == 0) { //Condicion para activar el envio if (RequestReadyToActive(aspr, UtcNow) == true) { if (TryReprog(spr) == true) { asprda.Update(aspr.Id, 1, UtcNow); log.Debug("Reprogramado OK ==> estado ACTIVO"); } else { log.Error("Reprogramado ERROR"); } } } else { //Status = 1 if (spr.StopTime != null && UtcNow >= spr.StopTime) { var IMONum = aspr.ShipPositionRequest.IMONum; var currentReqType = ShipPositionRequestHelper.GetMinutes(aspr.ShipPositionRequest.RequestType); var minReqType = GetMinPeriodForShip(IMONum, 0); log.Debug("Se cumplio Stop Time del request eliminando request activo"); asprda.Remove(aspr); //Verifica si el request tiene frecuencia distinta a la actual y reprograma si es necesario //si el request caduco reprograma para que reporte cada 6 horas log.Debug("Verificando si hay que reprogramar el equipo"); if (minReqType == currentReqType) { using (var sda = new ShipDataAccess()) { int newMinPeriod = GetMinPeriodForShip(IMONum, 0); if (newMinPeriod == -1) { newMinPeriod = 360; } //Reprogram ASP try { var aspman = new AspManager(); aspman.CreatePollMessage(DateTime.UtcNow.AddMinutes(8), newMinPeriod, sda.getByIMONum(spr.IMONum), PollAction.Reprogram); } catch (Exception ex) { ShipManager.ChangeShipStatus(ShipStatus.Error, sda.getByIMONum(spr.IMONum)); log.Error("Hubo un error en la reprogramacion del barco" + Environment.NewLine + Environment.NewLine + ex + Environment.NewLine + Environment.NewLine); } } } //log.Debug("ASPR " + aspr.Id + " REMOVED: Status: " + aspr.Status + " Barco:" + spr.IMONum); //log.Debug("Requestor: " + spr.DataUserRequestor); //log.Debug("Access-Request Type: " + spr.AccessType + "-" + spr.RequestType); continue; } //log.Debug("Verificando si es request de unica vez"); //ONE TIME POLL if (ShipPositionRequestHelper.IsOneTimePoll(spr.RequestType) == true) { //log.Debug("verificando si hay nueva posicion registrada"); ShipPosition spos = spm.GetLastShipPosition(spr.IMONum); if (spos != null && spos.TimeStamp > aspr.LastTime) { log.Debug("Nueva posicion con fecha > LastTime ... verificando titulacion"); CheckEntitlementAndSendReportOrReceipt(spr, spos); asprda.Remove(aspr); ShipManager.ChangeShipStatus(ShipStatus.Ok, ShipManager.getByIMONum(spr.IMONum)); log.Debug("ASPR " + aspr.Id + " REMOVED: Status: " + aspr.Status + " Barco:" + spr.IMONum); log.Debug("Requestor: " + spr.DataUserRequestor); log.Debug("Access-Request Type: " + spr.AccessType + "-" + spr.RequestType); continue; } } //PERIODIC REPORT else if (ShipPositionRequestHelper.IsPeriodicRequest(spr.RequestType) == true) { if (spr.RequestType == 2 && new int[] { 0, 15, 30, 45 }.Contains(mins) == false) //15 minute periodic rate { continue; } if (spr.RequestType == 3 && new int[] { 0, 30 }.Contains(mins) == false) //30 minute periodic rate { continue; } if (spr.RequestType == 4 && mins != 0) //1 hour periodic rate { continue; } if (spr.RequestType == 5 && (new int[] { 0, 3, 6, 9, 12, 15, 18, 21 }.Contains(hour) == false || mins != 0)) //3 hour periodic rate { continue; } if (spr.RequestType == 6 && (new int[] { 0, 6, 12, 18 }.Contains(hour) == false || mins != 0)) //6 hour periodic rate { continue; } if (spr.RequestType == 10 && (new int[] { 0, 12 }.Contains(hour) == false || mins != 0)) //12 hour periodic rate { continue; } if (spr.RequestType == 11 && (hour != 0 || mins != 0)) //24 hour periodic rate { continue; } int minutes = ShipPositionRequestHelper.GetMinutes(spr.RequestType); log.Debug("Procesando requerimiento periodico de " + minutes + " minutos"); //TimeSpan delta = TimeSpan.FromMinutes(minutes); //if (DCDebug == "true") // delta = TimeSpan.FromSeconds(minutes); //if (UtcNow >= aspr.LastTime.AddSeconds(delta.TotalSeconds)) //{ //log.Debug("se cumplio el periodo"); ShipPosition spos = spm.GetLastShipPosition(spr.IMONum); if (spos != null) { //La ultima posicion para el barco es mas nueva que la ultima que mande? if (spos.TimeStamp > aspr.LastTime) { CheckEntitlementAndSendReportOrReceipt(spr, spos); ShipManager.ChangeShipStatus(ShipStatus.Ok, ShipManager.getByIMONum(spr.IMONum)); } else if (spos.TimeStamp < aspr.LastTime) { //Feature-add: +30' estados del Active Ship Position Report log.Info("No new position since last report"); ReceiptManager.SendReceipt(spr.DataUserRequestor, spr.MessageId, DataCenterLogic.DataCenterTypesIDE.receiptCodeType.Item7, string.Format("No new position since last report")); return; } asprda.Update(aspr.Id, 1, spos.TimeStamp); log.Debug("ASPR " + aspr.Id + " UPDATED: Status: " + aspr.Status + " Barco:" + spr.IMONum); log.Debug("Requestor: " + spr.DataUserRequestor); log.Debug("Access-Request Type: " + spr.AccessType + "-" + spr.RequestType); } else { log.Error("Hubo un problema al verificar la titulacion y enviar la respuesta"); } } } } catch (Exception ex) { log.Error("Error procesando ASPR", ex); } } //foreach } }
/// <summary> /// Verifica si la ultima posicion de cada uno de nuestros barcos esta en alguna standing order. /// Tinen en cuenta hay un STOP para ese requestor. /// Tiene en cuenta la titulacion /// </summary> public void Process() { ShipDataAccess sda = null; try { sda = new ShipDataAccess(); var cgm = new ContractingGovermentManager(); var ddpm = new DDPVersionManager(); var ddpVersion = ddpm.GetCurrentDDPVersion(); log.Info("Procesando standing orders."); foreach (Ship ship in sda.GetAll()) { ShipPosition pos = null; using (var spda = new ShipPositionDataAccess()) { pos = spda.GetLastShipPosition(ship.IMONum); } if (pos == null) { log.Info(string.Format("No hay ultima posicion para {0}", ship.IMONum)); continue; } List <StandingOrder> orders = new List <StandingOrder>(); using (var soda = new StandingOrderDataAccess()) { orders = soda.GetOrdersForPosition(pos, ddpVersion); } if (orders.Count == 0) { log.Info(string.Format("No hay ninguna SO para {0},posid:{1},ddpVer:{2}", ship.IMONum, pos.Id, ddpVersion.Id)); continue; } var sprm = new ShipPositionReportManager(); foreach (StandingOrder order in orders) { var cg = order.Place.ContractingGoverment; //Skipeo las SO de argentina (no chekeo si mis barcos estan en mis SO) if (cg.LRITId == 1005) { continue; } using (var asprda = new ActiveShipPositionRequestDataAccess()) { if (asprda.IsStopRequired(ship, cg.LRITId.ToString()) == true) { log.Info("Stop Activo Para el Barco: " + ship.IMONum + " Requestor: " + cg.LRITId.ToString()); continue; } } log.Info(string.Format("El barco {0} esta dentro de la standing order {1}", ship.IMONum, order.PlaceId)); if (cgm.IsEntitled(cg, pos, ddpVersion, false) == false) { log.Info("no esta titulado para recibir la informacion, se envia recibo"); ReceiptManager.SendReceipt(cg.LRITId.ToString(), "0", DataCenterLogic.DataCenterTypesIDE.receiptCodeType.Item0, string.Format("Not entitled to recieve")); } else { sprm.SendReport(cg.LRITId.ToString(), pos, "", DataCenterLogic.DataCenterTypesIDE.responseTypeType.Item1, DataCenterLogic.DataCenterTypesIDE.messageTypeType.Item1); } } } } catch (Exception ex) { log.Error("Error procesando StandingOrders", ex); } finally { sda.Dispose(); } }
/// <summary> /// Procesa un mensaje de tipo ShipPositionRequest /// </summary> /// <param name="msg">Mensaje de la cola con ShipPositionRequest en el body</param> public void ProcessShipPositionRequest(ShipPositionRequestType shipPositionRequest) { log.Info("Procesando ShipPositionRequest"); try { if (ValidateShipPositionRequest(shipPositionRequest) != true) { return; } } catch (Exception ex) { log.Debug(ex); } Ship ship = null; using (var sdao = new ShipDataAccess()) { log.Debug("Verifica si existe el barco en la base de datos"); ship = sdao.getByIMONum(shipPositionRequest.IMONum); if (ship == null) { //The ship is not in our system, send receipt CODE 7 log.Debug("el barco no esta en nuestro sistema, se envia recibo codigo 7"); ReceiptManager.SendReceipt(shipPositionRequest.DataUserRequestor, shipPositionRequest.MessageId, DataCenterLogic.DataCenterTypesIDE.receiptCodeType.Item7, string.Format("The ship {0} is not registered", shipPositionRequest.IMONum)); return; } } //Save ship position request to obtain id log.Debug("Guardando SPR en base de datos para obtener id"); var shipPositionRequestDB = TypeHelper.Map2DB(shipPositionRequest); try { using (var spreq = new ShipPositionRequestDataAccess()) { spreq.Create(shipPositionRequestDB, 0); } } catch (Exception ex) { log.Error("Hubo un problema al guardar el mensaje"); log.Debug(ex); return; } //log.Debug("Verificando si ya hay un request activo para el barco"); //using (var asprDa = new ActiveShipPositionRequestDataAccess()) //{ // List<ActiveShipPositionRequest> asprlist = asprDa.GetAll(); // foreach (ActiveShipPositionRequest aspr in asprlist) // { // if (shipPositionRequest.IMONum == aspr.ShipPositionRequest.IMONum && // Convert.ToInt32(shipPositionRequest.AccessType) == aspr.ShipPositionRequest.AccessType && // shipPositionRequest.DataUserRequestor == aspr.ShipPositionRequest.DataUserRequestor // ) // { // log.Debug("Se reemplaza request del barco:" + shipPositionRequest.IMONum); // asprDa.Remove(aspr); // } // } //} #region Historics position report log.Debug("Verificando si es un request para datos archivados"); if (ShipPositionRequestHelper.IsHistoricRequest(shipPositionRequest.RequestType)) { ProcessHistoricShipPositionRequest(shipPositionRequest, ship); return; } #endregion #region Periodic position report log.Debug("Verificando si es un request periodico"); if (ShipPositionRequestHelper.IsPeriodicRequest(shipPositionRequest.RequestType)) { ActiveShipPositionRequestManager asprManager = new ActiveShipPositionRequestManager(); asprManager.AddOrReplace(shipPositionRequestDB); log.Debug("ASPR REPLACED: Barco:" + shipPositionRequest.IMONum); log.Debug("Requestor: " + shipPositionRequest.DataUserRequestor); log.Debug("Access-Request Type: " + shipPositionRequest.AccessType + "-" + shipPositionRequest.RequestType); //Es periodico, y nos saca de la frecuencia estandard 6hs (RequestType==6), y no es SAR (msgtype==5)? //Debemos cobrarle la presunta reprogramacion PRICING if (shipPositionRequest.RequestType != requestTypeType.Item6 && shipPositionRequest.MessageType == messageTypeType1.Item5) { /************************************************/ var pmgr = new PricingManager(); decimal?price = pmgr.AddASPReprogrMessage(0, shipPositionRequest.DataUserRequestor, shipPositionRequest.DataUserProvider); log.Info(string.Format("ProcessShipPositionRequest: Reprogramacion presunta par {0} => precio={1}", shipPositionRequest.MessageId, price)); /************************************************/ } return; } #endregion #region One Time poll log.Debug("Verificando si es un request para unica vez"); if (ShipPositionRequestHelper.IsOneTimePoll(shipPositionRequest.RequestType)) { ActiveShipPositionRequestManager asprManager = new ActiveShipPositionRequestManager(); //Crea Active asprManager.AddNew(shipPositionRequestDB.Id); log.Debug("ASPR ADDED: Barco:" + shipPositionRequest.IMONum); log.Debug("Requestor: " + shipPositionRequest.DataUserRequestor); log.Debug("Access-Request Type: " + shipPositionRequest.AccessType + "-" + shipPositionRequest.RequestType); } #endregion #region Reset Request log.Debug("Verificando si es un request reset"); if (ShipPositionRequestHelper.IsResetRequest(shipPositionRequest.RequestType)) { var asprManager = new ActiveShipPositionRequestManager(); asprManager.RemoveAllForRequestor(shipPositionRequestDB); } #endregion #region Stop Request log.Debug("Verificando si es un request Stop"); if (ShipPositionRequestHelper.IsStopRequest(shipPositionRequest.RequestType)) { ActiveShipPositionRequestManager asprManager = new ActiveShipPositionRequestManager(); asprManager.AddOrReplace(shipPositionRequestDB); log.Debug("ASPR REPLACED: Barco:" + shipPositionRequest.IMONum); log.Debug("Requestor: " + shipPositionRequest.DataUserRequestor); log.Debug("Access-Request Type: " + shipPositionRequest.AccessType + "-" + shipPositionRequest.RequestType); } #endregion return; }
public ActionResult Create([Bind(Exclude = "Id, Manga, Eslora, Calado")] Ship ship, int?shipid, string Manga, string Eslora, string Calado) { ship.ASPId = 1; var sda = new ShipDataAccess(context); if (ModelState.IsValid == false) { foreach (var val in ModelState.Values.ToList()) { val.Errors.Clear(); } //ModelState.AddModelError("", "Decimales deben ir separados por " + Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator); } if (ship.Name.Trim().Length == 0) { ModelState.AddModelError("Name", "Nombre requerido"); } if (ship.IMONum.Trim().Length == 0) { ModelState.AddModelError("IMONum", "IMOnum requerido"); } if (ship.EquipID.Trim().Length == 0) { ModelState.AddModelError("EquipID", "ID del equipo requerido"); } if (ship.MMSINum.Trim().Length == 0) { ModelState.AddModelError("MMSINum", "Numero MMSI requerido"); } if (ship.DNID.Trim().Length == 0) { ModelState.AddModelError("DNID", "Numero DNID requerido"); } if (ship.Member == 0) { ModelState.AddModelError("Member", "Numero Miembro requerido"); } //if (sda.getByMemberNum(ship.Member) != null) // ModelState.AddModelError("Member", "Ya hay otro barco con el mismo Member Number"); if (ship.Mobile.Trim().Length == 0) { ModelState.AddModelError("Mobile", "Numero Mobile requerido"); } //if (sda.getByMobileNum(ship.Mobile) != null) // ModelState.AddModelError("Member", "Ya hay otro barco con el mismo Mobile Number"); if (!ModelState.IsValid) { return(View("New", ship)); } try { if (shipid != null) { sda.Update(ship, (int)shipid, Manga, Eslora, Calado); return(RedirectToAction("List")); } Eslora = Eslora.Replace(',', '.'); if (Eslora != "") { ship.Eslora = Math.Round(float.Parse(Eslora), 2); } Manga = Manga.Replace(',', '.'); if (Manga != "") { ship.Manga = Math.Round(float.Parse(Manga), 2); } Calado = Calado.ToString().Replace(',', '.'); if (Calado != "") { ship.Calado = Math.Round(decimal.Parse(Calado), 2); } sda.Insert(ship); return(RedirectToAction("List")); } catch (Exception ex) { ModelState.AddModelError("", ex.Message); return(View("New", ship)); } }
public bool TryReprog(ShipPositionRequest spr) { bool reprogOk = true; /**************************************************************************************************/ if (ShipPositionRequestHelper.IsOneTimePoll(spr.RequestType) == true) { var ship = ShipManager.getByIMONum(spr.IMONum); try { var aspman = new AspManager(); // El 8 asegura un start frame posterior a la hora actual aspman.CreatePollMessage(DateTime.UtcNow.AddMinutes(8), 0, ship, PollAction.Report); log.Debug("Solitud Enviada (OneTimePoll) a IMO:" + ship.IMONum); } catch (Exception ex) { log.Error("Error al enviar la solicitud" + Environment.NewLine + Environment.NewLine + ex + Environment.NewLine + Environment.NewLine); reprogOk = false; } return(reprogOk); } /**************************************************************************************************/ int requestPeriod = ShipPositionRequestHelper.GetMinutes(spr.RequestType); log.Debug("Request de " + requestPeriod + " minutos"); //Get faster active request in minutes int minPeriod = GetMinPeriodForShip(spr.IMONum, spr.Id); log.Debug("Request activo mas frecuente del barco de " + minPeriod + " minutos"); //See if we need to reprogram the equipment on ship log.Debug("Verificando si es necesario reprogramar el equipo"); if (requestPeriod < minPeriod || minPeriod == -1) { using (var sdao = new ShipDataAccess()) { var ship = sdao.getByIMONum(spr.IMONum); //Reprogram ASP log.Debug("Se envia PollMessage"); try { var aspman = new AspManager(); // El 8 asegura un start frame posterior a la hora actual aspman.CreatePollMessage(DateTime.UtcNow.AddMinutes(8), requestPeriod, ship, PollAction.Reprogram); } catch (Exception ex) { log.Error("Hubo un problema al enviar la solicitud" + ex); reprogOk = false; } finally { } } } return(reprogOk); }