public void AddOrReplace(ShipPositionRequest shipPositionRequest)
 {
     using (var da = new ActiveShipPositionRequestDataAccess())
     {
         da.AddOrReplace(shipPositionRequest);
     }
 }
 /// <summary>
 /// Borra todos los requerimientos activos para un requestor en particular
 /// </summary>
 /// <param name="spr">ShipPositionRequest</param>
 public void RemoveAllForRequestor(ShipPositionRequest spr)
 {
     using (var asprda = new ActiveShipPositionRequestDataAccess())
     {
         asprda.RemoveAllForRequestor(spr);
     }
 }
        /// <summary>
        /// Borra todas los requerimientos activos para un mismo UserRequestor
        /// </summary>
        /// <param name="spr">ShipPositionRequest</param>
        public void RemoveAllForRequestor(ShipPositionRequest spr)
        {
            context.ActiveShipPositionRequests.DeleteAllOnSubmit(
                context.ActiveShipPositionRequests.Where <ActiveShipPositionRequest>
                    (c => spr.DataUserRequestor == c.ShipPositionRequest.DataUserRequestor));

            context.SubmitChanges();
        }
示例#4
0
        /// <summary>
        /// Transforma un ShipPositionRequestType en un ShipPositionRequest
        /// </summary>
        /// <param name="shipPositionRequest">ShipPositionRequestType</param>
        /// <returns>ShipPositionRequest</returns>
        public static ShipPositionRequest Map2DB(DataCenterLogic.DataCenterTypes.ShipPositionRequestType shipPositionRequest)
        {
            ShipPositionRequest retShipPositionRequest = new ShipPositionRequest();

            retShipPositionRequest.AccessType        = ToInt(shipPositionRequest.AccessType);
            retShipPositionRequest.DataUserProvider  = shipPositionRequest.DataUserProvider;
            retShipPositionRequest.DataUserRequestor = shipPositionRequest.DataUserRequestor;
            retShipPositionRequest.DDPVersionNum     = shipPositionRequest.DDPVersionNum;
            retShipPositionRequest.Distance          = shipPositionRequest.Distance;
            retShipPositionRequest.IMONum            = shipPositionRequest.IMONum;
            retShipPositionRequest.Item          = shipPositionRequest.Item;
            retShipPositionRequest.MessageId     = shipPositionRequest.MessageId;
            retShipPositionRequest.MessageType   = ToInt(shipPositionRequest.MessageType);
            retShipPositionRequest.RequestType   = ToInt(shipPositionRequest.RequestType);
            retShipPositionRequest.schemaVersion = shipPositionRequest.schemaVersion;

            retShipPositionRequest.StartTimeSpecified = 0;
            if (shipPositionRequest.RequestDuration != null)
            {
                retShipPositionRequest.StartTimeSpecified = ToInt(shipPositionRequest.RequestDuration.startTimeSpecified);
            }

            if (retShipPositionRequest.StartTimeSpecified != 0)
            {
                retShipPositionRequest.StartTime = shipPositionRequest.RequestDuration.startTime;
            }
            else
            {
                retShipPositionRequest.StartTime          = DateTime.UtcNow;
                retShipPositionRequest.StartTimeSpecified = 1;
            }

            retShipPositionRequest.StopTimeSpecified = 0;
            if (shipPositionRequest.RequestDuration != null)
            {
                retShipPositionRequest.StopTimeSpecified = ToInt(shipPositionRequest.RequestDuration.stopTimeSpecified);
            }

            if (retShipPositionRequest.StopTimeSpecified != 0)
            {
                retShipPositionRequest.StopTime = shipPositionRequest.RequestDuration.stopTime;
            }
            else
            {
                retShipPositionRequest.StopTime = null;
            }

            retShipPositionRequest.test      = ToInt(shipPositionRequest.test);
            retShipPositionRequest.TimeStamp = shipPositionRequest.TimeStamp;

            return(retShipPositionRequest);
        }
 /// <summary>
 /// Borra un requerimiento activo tomando en cuenta el AccessType, IMONum y DataUserRequestor
 /// </summary>
 /// <param name="spr">ShipPositionRequest</param>
 public void Remove(ShipPositionRequest spr)
 {
     context.ActiveShipPositionRequests.DeleteAllOnSubmit(
         context.ActiveShipPositionRequests.Where <ActiveShipPositionRequest>
             (c =>
             c.Status == 1 &&
             c.ShipPositionRequest.AccessType == spr.AccessType &&
             c.ShipPositionRequest.IMONum == spr.IMONum &&
             spr.DataUserRequestor == c.ShipPositionRequest.DataUserRequestor
             )
         );
     context.SubmitChanges();
 }
示例#6
0
        /// <summary>
        /// Crea un nuevo ShipPositionRequest en base de datos
        /// </summary>
        /// <param name="shipPositionRequest">ShipPositionRequest</param>
        /// <returns>ID del nuevo registro creado</returns>
        public int Create(ShipPositionRequest shipPositionRequest, int inOut)
        {
            shipPositionRequest.MsgInOut             = new MsgInOut();
            shipPositionRequest.MsgInOut.DDPVersion  = shipPositionRequest.DDPVersionNum;
            shipPositionRequest.MsgInOut.Destination = shipPositionRequest.DataUserProvider;
            shipPositionRequest.MsgInOut.InOut       = inOut;
            shipPositionRequest.MsgInOut.MsgId       = shipPositionRequest.MessageId;
            shipPositionRequest.MsgInOut.MsgType     = shipPositionRequest.MessageType;
            shipPositionRequest.MsgInOut.RefId       = "";
            shipPositionRequest.MsgInOut.Source      = shipPositionRequest.DataUserRequestor;
            shipPositionRequest.MsgInOut.TimeStamp   = shipPositionRequest.TimeStamp;

            context.ShipPositionRequests.InsertOnSubmit(shipPositionRequest);
            context.SubmitChanges();
            return(shipPositionRequest.Id);
        }
        public void AddOrReplace(ShipPositionRequest spr)
        {
            var aborrar = context.ActiveShipPositionRequests.Where <ActiveShipPositionRequest>
                              (c => c.ShipPositionRequest.AccessType == spr.AccessType &&
                              c.ShipPositionRequest.IMONum == spr.IMONum &&
                              spr.DataUserRequestor == c.ShipPositionRequest.DataUserRequestor
                              );

            context.ActiveShipPositionRequests.DeleteAllOnSubmit(aborrar);

            //Esto va aca??
            ActiveShipPositionRequest newActiveRequest = new ActiveShipPositionRequest();

            newActiveRequest.LastMessage = "Added";
            newActiveRequest.RequestId   = spr.Id;
            newActiveRequest.Status      = 0;
            newActiveRequest.LastTime    = DateTime.UtcNow;

            context.ActiveShipPositionRequests.InsertOnSubmit(newActiveRequest);
            context.SubmitChanges();
        }
示例#8
0
 public ActiveShipPositionRequest GetActiveShipPositionRequest(ShipPositionRequest spr)
 {
     return(context.ActiveShipPositionRequests.SingleOrDefault(a => a.ShipPositionRequest.Id == spr.Id));
 }
        /// <summary>
        /// Verifica si el DataUserRequestor esta titulado para recibir un mensaje de posicion
        /// </summary>
        /// <param name="spr">Mensaje ShipPositionRequest</param>
        /// <param name="spos">Posicion del barco</param>
        private void CheckEntitlementAndSendReportOrReceipt(ShipPositionRequest spr, ShipPosition spos)
        {
            var cgm  = new ContractingGovermentManager();
            var ddpm = new DDPVersionManager();

            //Febrero 2011
            var ddpVersion           = ddpm.DDPFromDate(spos.TimeStamp);
            var contractingGoverment = cgm.GetContractingGovermentByLRITId(spr.DataUserRequestor, ddpVersion.Id);

            //Solo verifico aguas internas del que lo pide si el acceso es COASTAL o FLAG
            bool verifyWatersOf = true;

            if (spr.AccessType == 3 || spr.AccessType == 5)
            {
                verifyWatersOf = false;
            }

            //Solo verifico titulacion si es distinto a SAR
            if (spr.AccessType != 6 && cgm.IsEntitled(contractingGoverment, spos, ddpVersion, verifyWatersOf) == false)
            {
                log.Debug("No titulado");
                ReceiptManager.SendReceipt(spr.DataUserRequestor, spr.MessageId, DataCenterLogic.DataCenterTypesIDE.receiptCodeType.Item0,
                                           string.Format("Not entitled to recieve"));
                return;
            }

            var sprm = new ShipPositionReportManager();

            /*************************** MEDITAR *****************************/

            //Default Coastal
            var responseType = DataCenterLogic.DataCenterTypesIDE.responseTypeType.Item1;
            //Periodic report
            var messageType = DataCenterLogic.DataCenterTypesIDE.messageTypeType.Item1;

            //Flag
            if (spr.AccessType == 2)
            {
                responseType = DataCenterLogic.DataCenterTypesIDE.responseTypeType.Item2;
            }
            //Port
            else
            if (spr.AccessType == 3 || spr.AccessType == 5)
            {
                responseType = DataCenterLogic.DataCenterTypesIDE.responseTypeType.Item3;
            }
            //Coastal
            else
            if (spr.AccessType == 1)
            {
                responseType = DataCenterLogic.DataCenterTypesIDE.responseTypeType.Item1;
            }
            //SAR
            else
            {
                responseType = DataCenterLogic.DataCenterTypesIDE.responseTypeType.Item4;
                messageType  = DataCenterLogic.DataCenterTypesIDE.messageTypeType.Item3;
            }

            //si es onetimepoll => msgtype polled report
            if (spr.RequestType == 1)
            {
                messageType = DataCenterLogic.DataCenterTypesIDE.messageTypeType.Item3;
            }

            /*************************************************************/

            sprm.SendReport(spr.DataUserRequestor, spos, spr.MessageId, responseType, messageType);
        }
        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);
        }