Beispiel #1
0
        /// <summary>
        /// Проверяет существование Реестра оплат по id
        /// </summary>
        /// <param name="id">id Реестра оплат</param>
        /// <returns></returns>
        // GET: api/OnlineReestr/5
        public HttpResponseMessage Get(string id)
        {
            Online_log.Info($"Get реестра оплат {0}", id.ToString());

            HttpResponseMessage response;

            Reestr c = new Reestr();

            String ln = "";
            BusinessEntityCollection fcontact = c.searchnew_reestr(id);

            foreach (DynamicEntity cont1 in fcontact.BusinessEntities)
            {
                ln = cont1["new_txn_id"].ToString();
            }

            if ((ln != ""))
            {
                response = Request.CreateResponse(HttpStatusCode.OK, ln);
            }
            else
            {
                response = Request.CreateResponse(HttpStatusCode.NoContent, ln);
            }

            return(response);
        }
Beispiel #2
0
        private void ExecuteEditCommand(Reestr reestr)
        {
            _dialogNavigationService.ShowDialog <ReestrEditViewModel, Reestr>(reestr, callback =>
            {
                if (callback.IsSuccess)
                {
                    Reestr updated = callback.Value;

                    Task.Run(async() =>
                    {
                        await _reestrDataService.UpdateReestr(updated);
                    })
                    .ContinueWith(x =>
                    {
                        if (x.Status == TaskStatus.RanToCompletion)
                        {
                            var r         = ReestrsCollection.FirstOrDefault(z => z.Id == reestr.Id);
                            r.ReestrState = updated.ReestrState;
                            r.Customer    = updated.Customer;
                            r.CustomerId  = updated.CustomerId;
                            r.Net         = updated.Net;
                            r.Note        = updated.Note;
                        }
                    });
                }
            });
        }
Beispiel #3
0
        private void ExecutePrintCommand(Reestr reestr)
        {
            var printViewType   = (PrintViewType)Enum.Parse(typeof(PrintViewType), SelectedPrintViewType.ToString());
            var printInitialize = PrintPreviewFactory.GetPrintView(printViewType);

            var flowDoc = printInitialize.InitializeFlow(new Models.ViewModels.ReestrObject(reestr));

            PrintHelper.Prints(flowDoc, reestr.PackingDate.ToString("dd.MM.yyyy"));
        }
        public async Task <bool> UpdateReestr(Reestr reestr)
        {
            using (var connection = _factory.CreateConnection())
            {
                var isSuccess = await connection.UpdateAsync(reestr);

                return(isSuccess);
            }
        }
Beispiel #5
0
        public HttpResponseMessage Post([FromBody] Reestr value)
        {
            GlobalStore         Proverka = new GlobalStore();
            HttpResponseMessage response;

            string json = JsonConvert.SerializeObject(value);

            Online_log.Info($"Try Post. Count: {GlobalStore.CurrentCount}. Reestr: {json}");

            if (Proverka.Check())
            {
                Reestr r        = new Reestr();
                Guid   g        = new Guid();
                string reestrid = r.Pay(value);



                if ((reestrid == null))
                {
                    response = new HttpResponseMessage(HttpStatusCode.NotModified);
                }
                else
                {
                    if (Guid.TryParse(reestrid, out g))
                    {
                        response = Request.CreateResponse(HttpStatusCode.OK, reestrid);
                    }
                    else
                    {
                        response = Request.CreateResponse(HttpStatusCode.Conflict, reestrid);
                    }

                    response.Content.Headers.Expires = new DateTimeOffset(DateTime.Now.AddSeconds(300));
                    Online_log.Info($"Ok Post  {response.StatusCode.ToString()}. Count: {GlobalStore.CurrentCount}. ReestrPay: {reestrid.ToString()}");
                }
            }
            else
            {
                string err = $"Много обращений! Count= {GlobalStore.CurrentCount}. Не более {Properties.Settings.Default.Count} в {Properties.Settings.Default.Interval} секунд";
                response = Request.CreateResponse(HttpStatusCode.Forbidden, err);
                Online_log.Error(err);
            }

            return(response);
        }
Beispiel #6
0
 public ReestrObject(Reestr reestr)
 {
     Id                = reestr.Id;
     BarrelNumber      = reestr.BarrelNumber;
     BatchNumber       = reestr.BatchNumber;
     PackingDate       = reestr.PackingDate;
     ReestrState       = reestr.ReestrState;
     Net               = reestr.Net;
     TareBarrel        = reestr.TareBarrel;
     TareBarrelWithLid = reestr.TareBarrelWithLid;
     Note              = reestr.Note;
     RecipeId          = reestr.RecipeId;
     BarrelStorageId   = reestr.BarrelStorageId;
     CustomerId        = reestr.CustomerId;
     Recipe            = (Recipe)reestr.Recipe?.Clone();
     BarrelStorage     = (BarrelStorage)reestr.BarrelStorage?.Clone();
     Customer          = (Customer)reestr.Customer?.Clone();
 }
Beispiel #7
0
        private Reestr CreateReestr(double net)
        {
            var reestr = new Reestr
            {
                BatchNumber       = ReestrSetting.BatchNumber,
                Customer          = ReestrSetting.Customer,
                CustomerId        = ReestrSetting.CustomerId,
                RecipeId          = ReestrSetting.CurrentRecipe.Id,
                Recipe            = ReestrSetting.CurrentRecipe,
                TareBarrel        = ReestrSetting.TaraBarrel,
                TareBarrelWithLid = ReestrSetting.TaraBarrelWithLid,
                PackingDate       = DateTime.Now,
                ReestrState       = true,
                Net = net,
            };

            reestr.BarrelNumber = ReestrSetting.GetBarrelNumberAndClearIt();
            return(reestr);
        }
        public async Task <Reestr> CreateReestr(Reestr reestr)
        {
            using (var connection = _factory.CreateConnection())
            {
                int    barrelNumber = 1;
                string firstQuery   = "SELECT * FROM Reestrs ORDER BY id DESC LIMIT 1";

                var result = await connection.QueryFirstOrDefaultAsync <Reestr>(firstQuery);

                if (result != null)
                {
                    barrelNumber = result.BarrelNumber + 1;
                }
                reestr.BarrelNumber = barrelNumber;
                await connection.InsertAsync(reestr);

                return(reestr);
            }
        }
        public static void WriteSingleRow(this ExcelWorksheet worksheet, Reestr reestr, int row)
        {
            worksheet.Cells[row, 1].Value = reestr.Recipe.LongNameRu;
            worksheet.Cells[row, 2].Value = reestr.BarrelNumber;
            worksheet.Cells[row, 3].Value = reestr.BatchNumber;
            worksheet.Cells[row, 4].Style.Numberformat.Format = "dd.MM.yyyy";
            worksheet.Cells[row, 4].Value = reestr.BarrelStorage.ProductionDate;
            worksheet.Cells[row, 5].Style.Numberformat.Format = "dd.MM.yyyy hh:mm";
            worksheet.Cells[row, 5].Value = reestr.PackingDate;
            worksheet.Cells[row, 6].Value = reestr.Customer.ShortName;
            worksheet.Cells[row, 7].Value = reestr.Net;
            worksheet.Cells[row, 8].Value = reestr.TareBarrelWithLid + reestr.Net;
            worksheet.Cells[row, 9].Value = reestr.Note;

            if (!reestr.ReestrState)
            {
                worksheet.Row(row).Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
                worksheet.Row(row).Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.Red);
            }
        }
Beispiel #10
0
 public PrintModel(Recipe recipe, Reestr reestr)
 {
     Recipe = recipe;
     Reestr = reestr;
 }
Beispiel #11
0
        //главная страница сайта
        public async Task <IActionResult> Index()
        {
            //если в браузере есть куки с ключом aptekaId, то выполняем автоматическую аутентификацию используя этот идентификатор aptekaId
            if (HttpContext.Request.Cookies.ContainsKey("aptekaId") && !IsAuthenticated())
            {
                string _aptekaId = HttpContext.Request.Cookies["aptekaId"];
                await AutoLoginByCookie(_aptekaId);

                return(RedirectToAction("Index"));
            }

            if (!IsAuthenticated())
            {
                HttpContext.Session.Remove("aptekaModel");
                HttpContext.Session.Remove("aptekaId");
                HttpContext.Session.Remove("userString");
                return(View("Logout"));
            }

            //определяем адрес на который пришел запрос gv.qwerty.plus или gnvls.qwerty.plus
            string requestUrl = HttpContext.Request.Host.Host;

            ViewBag.requestUrl = requestUrl;
            //ViewBag.requestUrl = "gv.qwerty.plus";
            //requestUrl = "gv.qwerty.plus";

            //параметры для постраничной навигации
            int offset    = 0;  //default value
            int rowsCount = 20; //default value

            //id аптеки получаем из сессии, значение сохранено в сессию при аутентификации
            string aptekaId = HttpContext.Session.GetString("aptekaId");

            //проверяем наличие значения id аптеки, если его нет, то отправляем на страницу аутентификации
            if (string.IsNullOrEmpty(aptekaId))
            {
                await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);

                //return RedirectToPage("/Account/Login");
                return(View("Logout"));
            }

            //сохраняем id аптеки в куки на стороне клиента, используется для автоматической аутентификации
            //if (!HttpContext.Request.Cookies.ContainsKey("aptekaId") || HttpContext.Request.Cookies["aptekaId"] != aptekaId)
            //{
            //}
            var cookieOptions = new CookieOptions()
            {
                Path        = "/",
                HttpOnly    = true,
                IsEssential = true,
                SameSite    = SameSiteMode.Strict,
                Expires     = DateTime.Now.AddMonths(1) //срок жизни куки атоматической авторизации
            };

            HttpContext.Response.Cookies.Append("aptekaId", aptekaId, cookieOptions);

            ViewBag.aptekaId = aptekaId;
            Apteka aptekaModel = null;

            //заносим модель аптеки в сессию
            if (HttpContext.Session.Keys.Contains("aptekaModel"))
            {
                aptekaModel = HttpContext.Session.Get <Apteka>("aptekaModel");
            }
            else
            {
                List <Apteka> apteka = await GetAptekaModel(aptekaId);

                HttpContext.Session.Set("aptekaModel", apteka.First());
            }

            //срабатывает только при первом обращении к контроллеру, когда модели аптеки еще нет в сессии
            if (aptekaModel == null)
            {
                aptekaModel = HttpContext.Session.Get <Apteka>("aptekaModel");
            }

            ViewBag.RegionId       = aptekaModel.RegionId;
            ViewBag.RegionName     = aptekaModel.RegionName;
            ViewBag.FullAptekaName = aptekaModel.FullAptekaName;
            ViewBag.TaxType        = aptekaModel.TaxType;

            string userString = string.Empty;

            if (Request.Method == "POST")
            {
                //сохраняем строку поиска в сессию, используется для выгрузки данных в csv
                if (Request.Form.Keys.Contains("userString"))
                {
                    userString = Request.Form["userString"];
                    HttpContext.Session.SetString("userString", userString);
                }
            }

            try
            {
                //создаем временную таблицу с результатами
                await CreateTempDataTable(aptekaId, aptekaModel.RegionId);

                //определяем количество страниц для навигации сайта
                int pagesCount = await GetRecordsCount(aptekaId, userString);

                if (Request.Method == "GET")
                {
                    pagesCount         = (int)Math.Ceiling((double)pagesCount / rowsCount);
                    ViewBag.PagesCount = pagesCount;
                }

                if (Request.Method == "POST")
                {
                    int currentPage = 1;

                    if (!string.IsNullOrEmpty(Request.Form["currentPage"]))
                    {
                        currentPage = int.Parse(Request.Form["currentPage"]);
                    }

                    if (!string.IsNullOrEmpty(Request.Form["rowsCount"]))
                    {
                        rowsCount = int.Parse(Request.Form["rowsCount"]);
                    }
                    pagesCount         = (int)Math.Ceiling((double)pagesCount / rowsCount);
                    ViewBag.PagesCount = pagesCount;

                    if (!string.IsNullOrEmpty(Request.Form["direction"]))
                    {
                        switch (Request.Form["direction"])
                        {
                        case "next":
                            if (currentPage < pagesCount)
                            {
                                currentPage++;
                            }
                            offset = (currentPage - 1) * rowsCount;
                            break;

                        case "prev":
                            if (currentPage > 1)
                            {
                                currentPage--;
                            }
                            offset = (currentPage - 1) * rowsCount;
                            break;

                        case "first":
                            offset = 0;
                            break;

                        case "last":
                            offset = (pagesCount - 1) * rowsCount;
                            break;

                        case "select-page":
                            offset = (currentPage - 1) * rowsCount;
                            break;

                        case "page-size":
                            offset = (currentPage - 1) * rowsCount;
                            break;
                        }
                    }
                }

                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    await connection.OpenAsync();

                    string name    = string.Empty;
                    string barcode = string.Empty;

                    if (Regex.IsMatch(userString, @"^\d+$") && userString.Length >= 8)
                    {
                        barcode = userString;
                    }
                    else
                    {
                        name = userString;
                    }

                    SqlCommand query = new SqlCommand();
                    query.CommandText = SqlCommandText.ForSite1;
                    query.Connection  = connection;
                    query.Parameters.AddWithValue("offset", offset);
                    query.Parameters.AddWithValue("rowsCount", rowsCount);
                    //query.Parameters.AddWithValue("aptekaId", int.Parse(aptekaId));
                    //query.Parameters.AddWithValue("regionId", int.Parse(aptekaModel.RegionId));
                    query.Parameters.AddWithValue("name", "%" + name + "%");
                    query.Parameters.AddWithValue("barcode", "%" + barcode + "%");
                    query.Parameters.AddWithValue("tableName", "tmp_gnvls_" + aptekaId);

                    SqlDataReader reader = await query.ExecuteReaderAsync();

                    if (reader.HasRows)
                    {
                        while (await reader.ReadAsync())
                        {
                            Reestr row = new Reestr
                            {
                                FullAptekaName          = reader["FullAptekaName"] as string,
                                Mhh                     = reader["Mhh"] as string,
                                Series                  = reader["Series"] as string,
                                Name                    = reader["Name"] as string,
                                Pro                     = reader["Pro"] as string,
                                Barcode                 = reader["Barcode"] as string,
                                Nds                     = reader["Nds"] as string,
                                ProducerRegisteredPrice = reader["ProducerRegisteredPrice"] as string,
                                ProducerRealPrice       = reader["ProducerRealPrice"] as string,
                                PurchasePriceWithoutVAT = reader["PurchasePriceWithoutVAT"] as string,
                                PremiumInPercentOpt     = reader["PremiumInPercentOpt"] as string,
                                PremiumInRubOpt         = reader["PremiumInRubOpt"] as string,
                                MaxOptPercent           = reader["MaxOptPercent"] as string,
                                PurchasePrice           = reader["PurchasePrice"] as string,
                                RetailPriceWithoutVAT   = reader["RetailPriceWithoutVAT"] as string,
                                PremiumInPercentRetail  = reader["PremiumInPercentRetail"] as string,
                                PremiumInRubRetail      = reader["PremiumInRubRetail"] as string,
                                MaxRetailPercent        = reader["MaxRetailPercent"] as string,
                                RetailPrice             = reader["RetailPrice"] as string
                            };
                            data.Add(row);
                        }
                    }
                    else
                    {
                        ViewBag.Message = "Запрошенная информация не найдена";
                    }
                    reader.Close();
                }
            }
            catch (SqlException e)
            {
                ViewBag.Message = "Ошибка получения данных с сервера, обновите страницу";
                WebExtensions.WriteToLog(logPath, DateTime.Now + " " + e.Message + Environment.NewLine + e.StackTrace + Environment.NewLine);
            }
            catch (Exception e)
            {
                ViewBag.Message = "Произошла критическая ошибка в работе приложения, пожалуйста перезагрузите ваш браузер, если ошибка будет повторяться - обратитесь к разработчику сайта";
                WebExtensions.WriteToLog(logPath, DateTime.Now + " " + e.Message + Environment.NewLine + e.StackTrace + Environment.NewLine);
            }

            if (Request.Method == "POST")
            {
                if (requestUrl == "gv.qwerty.plus")
                {
                    return(PartialView("_IndexGv", data));
                }
                return(PartialView("_Index", data));
            }

            if (requestUrl == "gv.qwerty.plus")
            {
                return(View("IndexGv", data));
            }
            return(View("Index", data));
        }
Beispiel #12
0
        public async Task <IEnumerable <Reestr> > GetCsvData()
        {
            string aptekaId    = HttpContext.Session.GetString("aptekaId");
            Apteka aptekaModel = HttpContext.Session.Get <Apteka>("aptekaModel");

            string name    = string.Empty;
            string barcode = string.Empty;

            if (HttpContext.Session.Keys.Contains("userString"))
            {
                string userString = HttpContext.Session.GetString("userString");
                if (Regex.IsMatch(userString, @"^\d+$") && userString.Length >= 8)
                {
                    barcode = userString;
                }
                else
                {
                    name = userString;
                }
            }

            SqlCommand query = new SqlCommand();

            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                await connection.OpenAsync();

                query.CommandText = SqlCommandText.ForCsv1;
                query.Connection  = connection;
                //query.Parameters.AddWithValue("aptekaId", int.Parse(aptekaId));
                //query.Parameters.AddWithValue("regionId", int.Parse(aptekaModel.RegionId));
                query.Parameters.AddWithValue("name", "%" + name + "%");
                query.Parameters.AddWithValue("barcode", "%" + barcode + "%");
                query.Parameters.AddWithValue("tableName", "tmp_gnvls_" + aptekaId);
                SqlDataReader reader = await query.ExecuteReaderAsync();

                if (reader.HasRows)
                {
                    while (await reader.ReadAsync())
                    {
                        Reestr row = new Reestr
                        {
                            FullAptekaName          = reader["FullAptekaName"] as string,
                            Mhh                     = reader["Mhh"] as string,
                            Series                  = reader["Series"] as string,
                            Name                    = reader["Name"] as string,
                            Pro                     = reader["Pro"] as string,
                            Barcode                 = reader["Barcode"] as string,
                            Nds                     = reader["Nds"] as string,
                            ProducerRegisteredPrice = reader["ProducerRegisteredPrice"] as string,
                            ProducerRealPrice       = reader["ProducerRealPrice"] as string,
                            PurchasePriceWithoutVAT = reader["PurchasePriceWithoutVAT"] as string,
                            PremiumInPercentOpt     = reader["PremiumInPercentOpt"] as string,
                            PremiumInRubOpt         = reader["PremiumInRubOpt"] as string,
                            MaxOptPercent           = reader["MaxOptPercent"] as string,
                            PurchasePrice           = reader["PurchasePrice"] as string,
                            RetailPriceWithoutVAT   = reader["RetailPriceWithoutVAT"] as string,
                            PremiumInPercentRetail  = reader["PremiumInPercentRetail"] as string,
                            PremiumInRubRetail      = reader["PremiumInRubRetail"] as string,
                            MaxRetailPercent        = reader["MaxRetailPercent"] as string,
                            RetailPrice             = reader["RetailPrice"] as string
                        };
                        data.Add(row);
                    }
                }
                reader.Close();
            }
            return(data);
        }
        public async Task <Reestr> CreateReestrAndUpdateBarrelStorage(Reestr reestr)
        {
            using (var connection = _factory.CreateConnection())
            {
                bool   isNextBarrelExist = true;
                string barrelQuery       = "SELECT *FROM BarrelStorages where isEmpty = false and recipeId =@recipeId";

                var barrelStorage = await connection.QueryFirstOrDefaultAsync <BarrelStorage>(barrelQuery, new { recipeId = reestr.RecipeId });

                if (barrelStorage == null)
                {
                    throw new BarrelStorageEmptyException();
                }

                if (barrelStorage.ConsumptionWeight + reestr.Net > barrelStorage.TotalWeight)
                {
                    barrelQuery += " and id != @id";

                    var nextBarrel = await connection.QueryFirstOrDefaultAsync <BarrelStorage>(barrelQuery, new { recipeId = reestr.RecipeId, id = barrelStorage.Id });

                    if (nextBarrel != null)
                    {
                        var reminder = barrelStorage.TotalWeight - barrelStorage.ConsumptionWeight;
                        nextBarrel.TotalWeight    += reminder;
                        barrelStorage.TotalWeight -= reminder;

                        string emptyUpdateQuery = "UPDATE BarrelStorages Set isEmpty= true,totalWeight = @TotalWeight  WHERE id =@id";
                        await connection.QueryAsync(emptyUpdateQuery, new { id = barrelStorage.Id, totalWeight = barrelStorage.TotalWeight });

                        barrelStorage = nextBarrel;
                    }
                    else
                    {
                        isNextBarrelExist = false;
                    }
                }
                if (isNextBarrelExist)
                {
                    barrelStorage.ConsumptionWeight += reestr.Net;
                }


                await connection.UpdateAsync(barrelStorage);

                reestr.BarrelStorageId = barrelStorage.Id;
                reestr.BarrelStorage   = barrelStorage;


                int    barrelNumber = 1;
                string firstQuery   = @"SELECT *FROM Reestrs as r
                                    LEFT JOIN Recipes as rc
                                    on rc.id = r.recipeid
                                    WHERE rc.BarrelRecipeType = @type
                                    ORDER BY r.id DESC LIMIT 1";

                var result = await connection.QueryFirstOrDefaultAsync <Reestr>(firstQuery, new { type = reestr.Recipe.BarrelRecipeType });

                if (result != null)
                {
                    barrelNumber = result.BarrelNumber + 1;
                }
                if (reestr.BarrelNumber != 0)
                {
                    barrelNumber = reestr.BarrelNumber;
                }
                reestr.BarrelNumber = barrelNumber;
                await connection.InsertAsync(reestr);

                return(reestr);
            }
        }