public HttpResponseMessage CreateMessageLogStatistic()
        {
            var msgForResponse = string.Empty;
            var allMesasgeLogs = _messageLogRepository.GetAndCreateMissingMesageLogsInStatistic();

            if (allMesasgeLogs.Count > 0)
            {
                foreach (var mlNeedToBeCreated in allMesasgeLogs)
                {
                    try
                    {
                        _messageLogStatisticRepository.InsertMessageLogStatistic(new MessageLogStatistic
                        {
                            Consumer         = mlNeedToBeCreated.Consumer,
                            Provider         = mlNeedToBeCreated.Provider,
                            RoutingToken     = mlNeedToBeCreated.RoutingToken,
                            Service          = mlNeedToBeCreated.Service,
                            ServiceMethod    = mlNeedToBeCreated.ServiceMethod,
                            TransactionId    = mlNeedToBeCreated.TransactionId,
                            Dir              = mlNeedToBeCreated.Dir,
                            CallType         = mlNeedToBeCreated.CallType,
                            PublicKey        = mlNeedToBeCreated.PublicKey,
                            Status           = mlNeedToBeCreated.Status,
                            MimeType         = mlNeedToBeCreated.MimeType,
                            Timestamp        = mlNeedToBeCreated.Timestamp,
                            CreateDate       = mlNeedToBeCreated.CreateDate,
                            Signature        = mlNeedToBeCreated.Signature,
                            CorrelationId    = mlNeedToBeCreated.CorrelationId,
                            ParticipantUri   = "CS",
                            TokenTimestamp   = mlNeedToBeCreated.TokenTimestamp,
                            IsCorrect        = mlNeedToBeCreated.IsCorrect,
                            ParticipantCode  = "CS",
                            ConsumerName     = mlNeedToBeCreated.ConsumerName,
                            RoutingTokenName = mlNeedToBeCreated.RoutingTokenName
                        });

                        msgForResponse += mlNeedToBeCreated.TransactionId + "; ";
                    }
                    catch (Exception ex)
                    {
                        _logger.Error("Nastanata e greska pri racno kreiranje vo MessageLogStatistic, greshkata e: " + ex);
                        throw new Exception(ex.Message);
                    }
                }

                return(SetResponseMessage(msgForResponse));
            }
            //if (allMesasgeLogs.Count > 0)
            //{
            //    foreach (var mLog in allMesasgeLogs)
            //    {
            //        msgForResponse += mLog + "; ";
            //    }
            //    return SetResponseMessage(msgForResponse);
            //}
            return(SetResponseMessage("Не постојат такви случаи."));
        }
        private void CreateMessageLogStatistics(IEnumerable <StatisticLogsFaults> participantMessageLogs, string participantUri, string participantCode, Dictionary <string, string> allServices)
        {
            LogToLocalFile(DateTime.Now + " --**--Pocnuva da zapisuva vo message log statistics tabelata");
            bool loggedP  = false;
            bool loggedCs = false;

            foreach (var logsAndFaults in participantMessageLogs)
            {
                var messageLogStatisticExist =
                    _messageLogStatisticRepository.MessageLogStatisticExist(logsAndFaults.TransactionId, logsAndFaults.MessageLog.Dir,
                                                                            participantCode);
                var makeConsumerWithMim12 = logsAndFaults.MessageLog.Consumer;
                LogToLocalFile(DateTime.Now + " --**--transakcija,dir,participant code: " + logsAndFaults.TransactionId + "," + logsAndFaults.MessageLog.Dir + "," + participantCode);
                //LogToLocalFile(DateTime.Now + " --**--consumer,provider,routingtoken,service,servicemethod,transactionid,dir,calltype,publickey,status,mimetype,timestamp,createdate,signature,correlationid,participanturi,timestamp, iscorrect," +
                //               "participantcode,consumername,routingtokenname,faultcode,faultsubcode,faulktreason,faultdetails,faultdatecreated: " + logsAndFaults.MessageLog.Consumer + "/" +
                //               logsAndFaults.MessageLog.Provider + "/" + logsAndFaults.MessageLog.RoutingToken + "/" + logsAndFaults.MessageLog.Service + "/" + logsAndFaults.MessageLog.ServiceMethod
                //               + "/" + logsAndFaults.MessageLog.TransactionId + "/" + logsAndFaults.MessageLog.Dir + "/" + logsAndFaults.MessageLog.CallType + "/" + logsAndFaults.MessageLog.PublicKey
                //               + "/" + logsAndFaults.MessageLog.MimeType
                //               + "/" + logsAndFaults.MessageLog.Timestamp
                //               + "/" + logsAndFaults.MessageLog.CreateDate
                //               + "/" + logsAndFaults.MessageLog.Signature + "/" + logsAndFaults.MessageLog.CorrelationId
                //               + "/" + participantUri
                //               + "/" + logsAndFaults.MessageLog.TokenTimestamp
                //               + "/" + logsAndFaults.MessageLog.IsCorrect
                //               + "/" + participantCode
                //               + "/" + _participantRepository.GetParticipantByBus(makeConsumerWithMim12).Name
                //                + "/" + _participantRepository.GetParticipant(logsAndFaults.MessageLog.RoutingToken).Name
                //                + "/" + logsAndFaults.SoapFault.Code
                //                + "/" + logsAndFaults.SoapFault.SubCode
                //                + "/" + logsAndFaults.SoapFault.Reason
                //                + "/" + logsAndFaults.SoapFault.Details
                //                + "/" + logsAndFaults.SoapFault.DateCreated);

                LogToLocalFile(DateTime.Now + " --**--messageLogStatisticExist: " + messageLogStatisticExist);

                if (!messageLogStatisticExist)
                {
                    //try
                    //{

                    //Ova e samo privremeno se duri ne se postavat Participant-tite od dva razlicni Bus-a da se so razlicen ParticipantCode
                    string makeConsumerWithMim1;
                    if (logsAndFaults.MessageLog.Consumer == "AVRM")
                    {
                        makeConsumerWithMim1 = "MIM2$$" + logsAndFaults.MessageLog.Consumer;
                    }
                    else
                    {
                        makeConsumerWithMim1 = logsAndFaults.MessageLog.Consumer;
                    }

                    var serviceCodeFromMessageLog = logsAndFaults.MessageLog.Service;
                    var serviceNameFromCode       = allServices[serviceCodeFromMessageLog];
                    _messageLogStatisticRepository.InsertMessageLogStatistic(new MessageLogStatistic
                    {
                        Consumer     = logsAndFaults.MessageLog.Consumer,
                        Provider     = logsAndFaults.MessageLog.Provider,
                        RoutingToken = logsAndFaults.MessageLog.RoutingToken,
                        //Service = logsAndFaults.MessageLog.Service,
                        Service        = serviceNameFromCode,
                        ServiceMethod  = logsAndFaults.MessageLog.ServiceMethod,
                        TransactionId  = logsAndFaults.MessageLog.TransactionId,
                        Dir            = logsAndFaults.MessageLog.Dir,
                        CallType       = logsAndFaults.MessageLog.CallType,
                        PublicKey      = logsAndFaults.MessageLog.PublicKey,
                        Status         = logsAndFaults.MessageLog.Status,
                        MimeType       = logsAndFaults.MessageLog.MimeType,
                        Timestamp      = logsAndFaults.MessageLog.Timestamp,
                        CreateDate     = logsAndFaults.MessageLog.CreateDate,
                        Signature      = logsAndFaults.MessageLog.Signature,
                        CorrelationId  = logsAndFaults.MessageLog.CorrelationId,
                        ParticipantUri = participantUri,
                        TokenTimestamp = logsAndFaults.MessageLog.TokenTimestamp,
                        IsCorrect      = logsAndFaults.MessageLog.IsCorrect,
                        /*Za testiranje ako neshto ne e vo red so Create vo statistika dali kje prodolzi so sleden participant, kje prati mail, kje zapise vo .txt*/
                        ParticipantCode  = participantCode,
                        ConsumerName     = _participantRepository.GetParticipantByBus(makeConsumerWithMim1).Name,
                        RoutingTokenName = _participantRepository.GetParticipant(logsAndFaults.MessageLog.RoutingToken).Name,
                        FaultCode        = logsAndFaults.SoapFault.Code,
                        FaultSubCode     = logsAndFaults.SoapFault.SubCode,
                        FaultReason      = logsAndFaults.SoapFault.Reason,
                        FaultDetails     = logsAndFaults.SoapFault.Details,
                        FaultDateCreated = logsAndFaults.SoapFault.DateCreated
                    });

                    if (participantCode == "CS" && !loggedCs)
                    {
                        loggedCs = true;
                        LogsInCreatingStatistics(DateTime.Now + "--**-- Uspeshno kreirani logovi od CS vo statistics tabelata");
                    }
                    else if (participantCode != "CS" && !loggedP)
                    {
                        loggedP = true;
                        LogsInCreatingStatistics(DateTime.Now + "--**-- Uspeshno kreirani logovi za participant " + participantCode);
                    }

                    //LogToLocalFile(DateTime.Now + " --**--Zapisal eden podatok");
                    //}
                    //catch (Exception exception)
                    //{
                    //    LogToLocalFile(DateTime.Now + "Se slucila greska pri zapisuvanje vo MessageLogStatistic" + exception);

                    //    //TODO:Diskutabilno
                    //    /*throw exception;*/
                    //}
                }
            }
            if (participantCode == "CS")
            {
                LogToLocalFile(DateTime.Now + " --**-- Napravil insert vo tabela MessageLogsStatistic");
            }
            LogToLocalFile(DateTime.Now + " --**-- napravil insert na message logs vo message logs statistic za participantot " + participantCode);
        }
        private List <string> CreateMessageLogStatistics(IEnumerable <StatisticLogsFaults> participantMessageLogs, string participantUri, string participantCode, DateTime?forDate)
        {
            //_logger.Info(DateTime.Now + " --**--Pocnuva da zapisuva vo message log statistics tabelata");
            var  macCultureInfo = CultureInfo.CreateSpecificCulture("mk-MK");
            var  msgForDisplay  = new List <string>();
            bool msgFound       = false;
            var  allServices    = _serviceRepository.GetServices().ToDictionary(s => s.Code, s => s.Name);

            foreach (var logsAndFaults in participantMessageLogs)
            {
                //_logger.Info(DateTime.Now + " --**--Za participant: " + participantUri);

                var messageLogStatisticExist = _messageLogStatisticRepository.MessageLogStatisticExist(logsAndFaults.TransactionId, logsAndFaults.MessageLog.Dir, participantCode);

                //_logger.Info(" --**--consumer,provider,routingtoken,service,servicemethod,transactionid,dir,calltype,publickey,status,mimetype,timestamp,createdate,signature,correlationid,participanturi,timestamp, iscorrect," +
                //               "participantcode,consumername,routingtokenname,faultcode,faultsubcode,faulktreason,faultdetails,faultdatecreated: " + logsAndFaults.MessageLog.Consumer + "/" +
                //               logsAndFaults.MessageLog.Provider + "/" + logsAndFaults.MessageLog.RoutingToken + "/" + logsAndFaults.MessageLog.Service + "/" + logsAndFaults.MessageLog.ServiceMethod
                //               + "/" + logsAndFaults.MessageLog.TransactionId + "/" + logsAndFaults.MessageLog.Dir + "/" + logsAndFaults.MessageLog.CallType + "/" + logsAndFaults.MessageLog.PublicKey
                //               + "/" + logsAndFaults.MessageLog.MimeType
                //               + "/" + logsAndFaults.MessageLog.Timestamp
                //               + "/" + logsAndFaults.MessageLog.CreateDate
                //               + "/" + logsAndFaults.MessageLog.Signature + "/" + logsAndFaults.MessageLog.CorrelationId
                //               + "/" + participantUri
                //               + "/" + logsAndFaults.MessageLog.TokenTimestamp
                //               + "/" + logsAndFaults.MessageLog.IsCorrect
                //               + "/" + participantCode
                //               + "/" + _participantsRepository.GetParticipant(logsAndFaults.MessageLog.Consumer).Name
                //                + "/" + _participantsRepository.GetParticipant(logsAndFaults.MessageLog.RoutingToken).Name
                //                + "/" + logsAndFaults.SoapFault.Code
                //                + "/" + logsAndFaults.SoapFault.SubCode
                //                + "/" + logsAndFaults.SoapFault.Reason
                //                + "/" + logsAndFaults.SoapFault.Details
                //                + "/" + logsAndFaults.SoapFault.DateCreated);

                if (!messageLogStatisticExist)
                {
                    try
                    {
                        //Ova e samo privremeno se duri ne se postavat Participant-tite od dva razlicni Bus-a da se so razlicen ParticipantCode
                        string makeConsumerWithMim1;
                        if (logsAndFaults.MessageLog.Consumer == "AVRM")
                        {
                            makeConsumerWithMim1 = "MIM2$$" + logsAndFaults.MessageLog.Consumer;
                        }
                        else
                        {
                            makeConsumerWithMim1 = logsAndFaults.MessageLog.Consumer;
                        }
                        var serviceCodeFromMessageLog = logsAndFaults.MessageLog.Service;
                        var serviceNameFromCode       = allServices[serviceCodeFromMessageLog];
                        _messageLogStatisticRepository.InsertMessageLogStatistic(new MessageLogStatistic
                        {
                            Consumer     = logsAndFaults.MessageLog.Consumer,
                            Provider     = logsAndFaults.MessageLog.Provider,
                            RoutingToken = logsAndFaults.MessageLog.RoutingToken,
                            //Service = logsAndFaults.MessageLog.Service, //ova e service code
                            Service         = serviceNameFromCode,
                            ServiceMethod   = logsAndFaults.MessageLog.ServiceMethod,
                            TransactionId   = logsAndFaults.MessageLog.TransactionId,
                            Dir             = logsAndFaults.MessageLog.Dir,
                            CallType        = logsAndFaults.MessageLog.CallType,
                            PublicKey       = logsAndFaults.MessageLog.PublicKey,
                            Status          = logsAndFaults.MessageLog.Status,
                            MimeType        = logsAndFaults.MessageLog.MimeType,
                            Timestamp       = logsAndFaults.MessageLog.Timestamp,
                            CreateDate      = logsAndFaults.MessageLog.CreateDate,
                            Signature       = logsAndFaults.MessageLog.Signature,
                            CorrelationId   = logsAndFaults.MessageLog.CorrelationId,
                            ParticipantUri  = participantUri,
                            TokenTimestamp  = logsAndFaults.MessageLog.TokenTimestamp,
                            IsCorrect       = logsAndFaults.MessageLog.IsCorrect,
                            ParticipantCode = participantCode,
                            //ConsumerName = _participantsRepository.GetParticipant(logsAndFaults.MessageLog.Consumer).Name,
                            ConsumerName     = _participantsRepository.GetParticipantByBus(makeConsumerWithMim1).Name,
                            RoutingTokenName = _participantsRepository.GetParticipant(logsAndFaults.MessageLog.RoutingToken).Name,
                            FaultCode        = logsAndFaults.SoapFault.Code,
                            FaultSubCode     = logsAndFaults.SoapFault.SubCode,
                            FaultReason      = logsAndFaults.SoapFault.Reason,
                            FaultDetails     = logsAndFaults.SoapFault.Details,
                            FaultDateCreated = logsAndFaults.SoapFault.DateCreated
                        });
                        if (!msgFound)
                        {
                            msgForDisplay.Add("Успешно: Креиран е запис во табелата MessageLogStatistic за учесник " +
                                              participantCode +
                                              " за датум " + forDate.Value.ToString("dd.MM.yyyy", macCultureInfo) + ".");
                        }
                        msgFound = true;
                        //_logger.Info(DateTime.Now + " --**--Zapisal eden podatok za message logs vo statistic tabelata za participant " + participantCode);
                    }
                    catch (Exception exception)
                    {
                        _logger.Error(DateTime.Now + "Se slucila greska pri zapisuvanje vo MessageLogStatistic" + exception);
                        //throw exception;
                    }
                }
                else
                {
                    msgForDisplay.Add("Неуспешно: Записот за учесник " +
                                      participantCode +
                                      " и датум " + forDate.Value.ToString("dd.MM.yyyy", macCultureInfo) + " веќе постои. Трансакција: " + logsAndFaults.TransactionId + ", тип на повик: " + logsAndFaults.MessageLog.Dir + ", код на учесник: " + participantCode);
                }
            }
            return(msgForDisplay);
        }