Ejemplo n.º 1
0
 public ShipPositionRequest GetByMessageID(string msgid)
 {
     using (var sprmdao = new ShipPositionRequestDataAccess())
     {
         return(sprmdao.GetByMessageId(msgid));
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Procesa un mensaje de tipo Receipt
        /// </summary>
        /// <param name="msg">El mensaje Receipt</param>
        public void ProcessReceipt(ReceiptType receipt)
        {
            decimal?price = null;

            if (receipt.ReceiptCode == receiptCodeType.Item0 && receipt.ReferenceId.Length > 0)
            {
                //Era un recibo correspondiente a un REQUERIMIENTO?
                var sprm = new ShipPositionRequestDataAccess();
                if (sprm.RequestExists(receipt.ReferenceId) == true)
                {
                    var pman = new PricingManager();
                    price = pman.GetPriceForRequest(receipt.ReferenceId, receipt.Originator);
                    if (price == null)
                    {
                        log.Warn(string.Format("ProcessReceipt: Se recibio un receipt codigo 0 {0}, no podemos poner precio", receipt.MessageId));
                    }
                }
                else
                {
                    log.Warn(string.Format("ProcessReceipt: recibo 0 {0} no referido a Requerimiento", receipt.MessageId));
                }
            }

            using (var dao = new ReceiptDataAccess())
            {
                dao.Create(TypeHelper.Map2DB(receipt), 0, price);
            }
            log.Info(string.Format("Receipt successfully processed: price {0}", price));
        }
Ejemplo n.º 3
0
        private string SendShipPositionRequest(Message msg)
        {
            DataCenterLogic.DataCenterTypesIDE.ShipPositionRequestType shipPositionRequest = (DataCenterLogic.DataCenterTypesIDE.ShipPositionRequestType)(msg.Body);

            //Send to IDE
            if (System.Configuration.ConfigurationManager.AppSettings["send2servers"] != "False")
            {
                shipPositionRequest.test = DataCenterLogic.DataCenterTypesIDE.testType.Item0;
                ideClient.ShipPositionRequest(shipPositionRequest);
                log.Info("SendShipPositionRequest: shipPositionRequest sent to IDE");
            }

            if (ShipPositionRequestHelper.IsPeriodicRequest(shipPositionRequest.RequestType))
            {
                //Es periodico, y pedimos sacarlo de la frecuencia estandard 6hs (RequestType==6), y no es SAR (msgtype==5)?
                //Debemos imputarnos la presunta reprogramacion PRICING
                if (shipPositionRequest.RequestType != DataCenterLogic.DataCenterTypesIDE.requestTypeType.Item6 &&
                    shipPositionRequest.MessageType == DataCenterLogic.DataCenterTypesIDE.messageTypeType1.Item5)
                {
                    /************************************************/
                    var     pmgr  = new PricingManager();
                    decimal?price = pmgr.AddASPReprogrMessage(0, shipPositionRequest.DataUserRequestor, shipPositionRequest.DataUserProvider);
                    log.Info(string.Format("SendShipPositionRequest: Reprogramacion presunta par {0} => precio={1}", shipPositionRequest.MessageId, price));
                    /************************************************/
                }
            }

            //Guarda el mensaje en la base de datos
            using (var dao = new ShipPositionRequestDataAccess())
            {
                dao.Create(TypeHelper.Map2DB(shipPositionRequest), 1);
            }
            log.Info("ShipPositionRequest stored");
            return(shipPositionRequest.MessageId);
        }
Ejemplo n.º 4
0
        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();
                }
            }
        }
Ejemplo n.º 5
0
        /// <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;
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Procesa un mensaje de tipo ShipPositionReport
        /// </summary>
        /// <param name="msg">El mensaje ShipPositionReport</param>
        public void ProcessShipPositionReport(DataCenterTypes.ShipPositionReportType shipPositionReport)
        {
            var configMgr = new ConfigurationManager();

            //Verifica si existe el Data User que requiere la información
            var cgm  = new ContractingGovermentManager();
            var ddpm = new DDPVersionManager();

            var ddpVersion = ddpm.GetCurrentDDPVersion();

            var contractingGoverment = cgm.GetContractingGovermentByLRITId(shipPositionReport.DataUserRequestor, ddpVersion.Id);

            if (contractingGoverment == null)
            {
                string strError = string.Format("Specified LDU '{0}' does not exist", shipPositionReport.DataUserRequestor);

                //Arma mensaje de Recibo
                DataCenterLogic.DataCenterTypes.ReceiptType receipt = new DataCenterLogic.DataCenterTypes.ReceiptType();


                receipt.DDPVersionNum = DDPVersionManager.currentDDP();
                receipt.Destination   = shipPositionReport.DCId;
                receipt.Message       = strError;
                receipt.MessageId     = MessageIdManager.Generate();
                receipt.MessageType   = DataCenterLogic.DataCenterTypes.messageTypeType3.Item7;
                receipt.Originator    = configMgr.Configuration.DataCenterID;
                receipt.ReceiptCode   = DataCenterLogic.DataCenterTypes.receiptCodeType.Item7;
                receipt.ReferenceId   = shipPositionReport.MessageId;
                receipt.schemaVersion = decimal.Parse(configMgr.Configuration.SchemaVersion);
                receipt.test          = DataCenterLogic.DataCenterTypes.testType.Item1;
                receipt.TimeStamp     = DateTime.UtcNow;

                Message msgout = new Message(receipt);
                msgout.Label = "receipt";

                //Encola mensaje
                QueueManager.Instance().EnqueueOut(msgout);

                log.Error(strError);
                return;
            }

            //Verifica si el existe el Id de referencia
            if (shipPositionReport.ReferenceId != "")
            {
                var sprda = new ShipPositionRequestDataAccess();
                if (sprda.RequestExists(shipPositionReport.ReferenceId) == false)
                {
                    string strError = string.Format("MessageID not found for ReferenceID '{0}'", shipPositionReport.ReferenceId);

                    //Envía Recibo
                    DataCenterLogic.DataCenterTypes.ReceiptType receipt = new DataCenterLogic.DataCenterTypes.ReceiptType();
                    receipt.DDPVersionNum = DDPVersionManager.currentDDP();
                    receipt.Destination   = shipPositionReport.DCId;
                    receipt.Message       = strError;
                    receipt.MessageId     = MessageIdManager.Generate();
                    receipt.MessageType   = DataCenterLogic.DataCenterTypes.messageTypeType3.Item7;
                    receipt.Originator    = configMgr.Configuration.DataCenterID;
                    receipt.ReceiptCode   = DataCenterLogic.DataCenterTypes.receiptCodeType.Item7;
                    receipt.ReferenceId   = shipPositionReport.MessageId;
                    receipt.schemaVersion = decimal.Parse(configMgr.Configuration.SchemaVersion);
                    receipt.test          = DataCenterLogic.DataCenterTypes.testType.Item1;
                    receipt.TimeStamp     = DateTime.UtcNow;

                    Message msgout = new Message(receipt);
                    msgout.Label = "receipt";

                    //Envia mensaje
                    QueueManager.Instance().EnqueueOut(msgout);

                    log.Error(strError);
                    return;
                }
            }

            //ReferenceID puede ser de un report o "" si es SO
            //DataUserProvider es el usuario que nos manda (deberiamos tener contrato con el)
            var     pricing = new PricingManager();
            decimal?price   = pricing.GetPriceForRequest(shipPositionReport.ReferenceId, shipPositionReport.DataUserProvider);

            //No tengo precio?
            if (price == null)
            {
                log.Warn(string.Format("SendShipPositionReport: Se recibio un reporte {0} de posicion, no podemos poner precio", shipPositionReport.MessageId));
            }

            //Save position report to DB
            using (var dao = new ShipPositionReportDataAccess())
            {
                dao.Create(TypeHelper.Map2DB(shipPositionReport), 0, price);
            }

            log.Info(string.Format("ShipPositionReport successfully processed: price {0}", price));
        }
Ejemplo n.º 7
0
        public ActionResult GridData(int page, int rows, string[] _search, string sidx, string sord, int msgInOut)
        {
            string[]      ReqParams = { "IMONum", "DataUserRequestor", "DataUserProvider", "AccessType", "RequestType", "StartTime", "StopTime", "MessageID", "TimeStamp" };
            List <string> columns   = new List <string>();
            List <string> querys    = new List <string>();


            //Vectores Apareados SearchQuery, Columns
            string tstamp   = "-";
            var    fromDate = new DateTime(2000, 1, 1);
            var    toDate   = new DateTime(2200, 1, 1);

            for (int i = 0; i < ReqParams.Count(); i++)
            {
                if (ReqParams[i].Contains("TimeStamp"))
                {
                    tstamp = Request.Params[ReqParams[i]];
                    if (tstamp != null)
                    {
                        var dates = tstamp.Split('-');
                        fromDate = DateTime.Parse(dates[0]);
                        if (dates.Length == 1)
                        {
                            toDate = fromDate.AddDays(1);
                        }
                        else
                        {
                            toDate = DateTime.Parse(dates[1]);
                        }
                    }
                    continue;
                }

                var tempValue = Request.Params[ReqParams[i]];
                if (tempValue != null)
                {
                    columns.Add(ReqParams[i]);
                    querys.Add(tempValue);
                }
            }


            var sprda = new ShipPositionRequestDataAccess(context);
            IQueryable <ShipPositionRequest> requests;

            if (msgInOut == 2)
            {
                requests = sprda.GetActives();
            }
            else
            {
                requests = sprda.GetAllBetween(msgInOut, fromDate, toDate);
            }

            var model = from entity in requests.OrderBy(sidx + " " + sord)
                        select new
            {
                IMONum            = entity.IMONum,
                DataUserRequestor = entity.DataUserRequestor,
                DataUserProvider  = entity.DataUserProvider,
                AccessType        = entity.AccessType,
                RequestType       = entity.RequestType,
                StartTime         = entity.StartTime.ToString(),
                StopTime          = entity.StopTime.ToString(),
                MessageId         = entity.MessageId,
                TimeStamp         = entity.TimeStamp.ToString(),
            };

            return(Json(model.ToJqGridData(page, rows, null, querys.ToArray(), columns.ToArray())));
        }