public IEnumerable <IResult> ReturnCheck() { if (checkType == CheckType.SaleBuyer) { Warning.Show(Common.Tools.Message.Warning($"При открытом документе продажи, возврат не возможен")); yield break; } var Checks = new Checks(true); yield return(new DialogResult(Checks, resizable: true)); if (!Checks.DialogCancelled && Checks.CurrentItem != null) { if (((Check)Checks.CurrentItem).CheckType == CheckType.CheckReturn) { Warning.Show(Common.Tools.Message.Warning($"По документу возврат, возврат не возможен")); yield break; } checkType = CheckType.CheckReturn; CheckLinesForReturn = Session.Query <CheckLine>() .Where(x => x.CheckId == ((Check)Checks.CurrentItem).Id) .Fetch(x => x.Stock) .ToList(); foreach (var line in CheckLinesForReturn) { var checkLine = new CheckLine(line.Stock, (uint)line.Quantity, CheckType.CheckReturn); Lines.Add(checkLine); CurrentLine.Value = checkLine; } } }
public void Doc_Close() { //На складе есть Папаверин в количестве 5шт. Assert.AreEqual(stock.Quantity, 5); //добавляем строку на 3 упаковки var line = new CheckLine(stock, 3); model.Lines.Add(line); model.checkType = CheckType.SaleBuyer; // Оплата по чеку var result = model.Close().GetEnumerator(); result.MoveNext(); var dialog = ((Checkout)((DialogResult)result.Current).Model); dialog.Amount.Value = 10; result.MoveNext(); // после оплаты на складе остается 2 var check = session.Query <Check>().First(); var loadstock = session.Query <Stock>().Where(x => x.Id == stock.Id).First(); Assert.AreEqual(loadstock.Quantity, 2); Assert.AreEqual(check.Sum, 3); Assert.AreEqual(check.Status, Status.Closed); }
// Распаковка Ctrl+U public IEnumerable <IResult> Unpack() { if (checkType == CheckType.CheckReturn) { Warning.Show(Common.Tools.Message.Warning($"Распаковка при возврате не возможена")); yield break; } var srcStock = CurrentLine.Value.Stock; if (srcStock == null) { Warning.Show(Common.Tools.Message.Warning($"Не определен товар для распаковки")); yield break; } if (srcStock.Unpacked) { yield break; } var inputQuantity = new InputQuantity((OrderedStock)srcStock); yield return(new DialogResult(inputQuantity, resizable: false)); if (!inputQuantity.WasCancelled) { Lines.Remove(CurrentLine.Value); checkType = CheckType.SaleBuyer; var line = new CheckLine(inputQuantity.DstStock, inputQuantity.SrcStock, inputQuantity.DstStock.Value.Ordered.Value); Lines.Add(line); CurrentLine.Value = line; } }
public void Consumption_report() { var line = waybill.Lines[10]; line.CatalogId = null; var stock = new Stock(waybill, line, session); session.Save(stock); Assert.AreEqual(stock.Product, line.Product); var check = new Check(); check.Status = Status.Closed; session.Save(check); var checkLine = new CheckLine(stock, 1, CheckType.SaleBuyer); checkLine.CheckId = check.Id; session.Save(checkLine); session.Flush(); var result = model.ConsumptionReport().GetEnumerator(); var task = Next <TaskResult>(result); task.Task.Start(); task.Task.Wait(); var open = Next <OpenResult>(result); Assert.IsTrue(File.Exists(open.Filename), open.Filename); Assert.That(open.Filename, Does.Contain("Расход по документу")); }
public void Unpack() { stock = new OrderedStock() { Product = "Папаверин", Status = StockStatus.Available, Address = address, RetailCost = 1, Quantity = 10, ReservedQuantity = 0, Barcode = "10", ProductId = 1, CatalogId = 1, Exp = SystemTime.Now() }; session.Save("AnalitF.Net.Client.Models.Inventory.Stock", stock); session.Flush(); //добавляем строку на 3 упаковки var line = new CheckLine(stock, 3, CheckType.SaleBuyer); model.Lines.Add(line); model.CurrentLine.Value = line; var result = model.Unpack().GetEnumerator(); result.MoveNext(); var dialog = ((InputQuantity)((DialogResult)result.Current).Model); dialog.Quantity.Value = 2; dialog.Multiplicity.Value = 6; dialog.OK(); result.MoveNext(); // из них две в чеке Assert.AreEqual(model.CurrentLine.Value.Quantity, 2); var dstStock = model.CurrentLine.Value.Stock; result = model.Close().GetEnumerator(); result.MoveNext(); var dialog1 = ((Checkout)((DialogResult)result.Current).Model); dialog1.Amount.Value = 10; result.MoveNext(); session.Clear(); var loadstock = session.Query <Stock>().Where(x => x.Id == dstStock.Id).First(); Assert.AreEqual(loadstock.Quantity, 6 - 2); Assert.AreEqual(loadstock.Multiplicity, 6); }
public void Step() { SubCheckLines.UnionWith(CheckLines); CheckLines.Clear(); foreach (var CheckLine in SubCheckLines) { CheckLine.Step(); } SubCheckLines.Clear(); foreach (var CheckLoc in CheckLocations) { CheckLoc.Process(); } CheckLocations.Clear(); }
public void Step() { SubCheckLines.UnionWith(CheckLines); CheckLines.Clear(); foreach (var CheckLine in SubCheckLines) { CheckLine.Step(); } SubCheckLines.Clear(); foreach (var explosionNode in CheckLocations.ToArray()) { CheckLocations.Remove(explosionNode); //lets not create infinite explosions in the case of a runtime explosionNode.Process(); } }
private void AddBarcodeProduct(BarcodeProducts item, uint quantity, decimal retailCost) { if (checkType == null) { checkType = CheckType.SaleBuyer; } var exists = Lines.FirstOrDefault(x => x.BarcodeProduct.Id == item.Id && x.RetailCost == retailCost); if (exists != null) { exists.Quantity += quantity; } else { var line = new CheckLine(item, quantity, retailCost); Lines.Add(line); CurrentLine.Value = line; } }
private void AddStock(Stock item) { if (checkType == null) { checkType = CheckType.SaleBuyer; } var exists = Lines.FirstOrDefault(x => x.Stock.Id == item.Id); if (exists != null) { exists.Quantity = 1; CurrentLine.Value = exists; } else { var line = new CheckLine(item, 1); Lines.Add(line); CurrentLine.Value = line; } }
private void UpdateOrAddStock(OrderedStock item) { if (checkType == null) { checkType = CheckType.SaleBuyer; } var exists = Lines.FirstOrDefault(x => x.Stock.Id == item.Id); if (exists != null) { exists.Quantity = item.Ordered.Value; CurrentLine.Value = exists; } else { var checkLine = new CheckLine(item, item.Ordered.Value); Lines.Add(checkLine); CurrentLine.Value = checkLine; } }
public void CheckCurentCatalog() { var line = new CheckLine(stock, 3); model.CurrentLine.Value = line; model.Lines.Add(line); model.checkType = CheckType.SaleBuyer; scheduler.AdvanceByMs(2000); Assert.AreEqual(catalog.Id, model.CurrentCatalog.Value.Id); var CatalogChooser = new CatalogChooser("упа", stock.Address); scheduler.AdvanceByMs(2000); Assert.AreEqual(catalog.Id, CatalogChooser.CurrentCatalog.Value.Id); CatalogChooser.TryClose(); var stockChooser = new StockChooser(catalog.Id, model.Lines, stock.Address); Assert.AreEqual(catalog.Id, stockChooser.CurrentCatalog.Value.Id); stockChooser.TryClose(); }
//Проверка существования номера в базе public bool IsLPExist(string LP) { string CheckLine; string[] Parameters; using (FileStream FS = new FileStream(DirectoryPath, FileMode.Open)) { using (StreamReader SR = new StreamReader(FS, Encoding.UTF8)) { while ((CheckLine = SR.ReadLine()) != null) { if (CheckLine.Contains(LP)) { Parameters = CheckLine.Split(' '); if (Parameters[0] == LP) { return(true); } } } } } return(false); }
static void Main(string[] args) { const int NumOfParameters = 5; //Проверка существования файла базы (вызывается в начале каждой функции) //Если файла по заданному пути не существует, создается новый пустой файл с именем Directory.txt void IsDBExist() { if (!File.Exists(DirectoryPath)) { var DirectoryFile = File.Create(DirectoryPath); DirectoryFile.Close(); const string ValueForDataIfDirectoryFileDoNotExist = ""; File.AppendAllText(DirectoryPath, ValueForDataIfDirectoryFileDoNotExist); Console.WriteLine("Предупреждение. Исходный файл не был найден, он был заменён на новый."); } } //Проверка существования номера в базе bool IsLPExist(string LP) { string CheckLine; string[] Parameters; using (FileStream FS = new FileStream(DirectoryPath, FileMode.Open)) { using (StreamReader SR = new StreamReader(FS, Encoding.UTF8)) { while ((CheckLine = SR.ReadLine()) != null) { if (CheckLine.Contains(LP)) { Parameters = CheckLine.Split(' '); if (Parameters[0] == LP) { return(true); } } } } } return(false); } //Вывод списка void Output() { IsDBExist(); string OutputLine; string[] OutputLineArray; Console.WriteLine("\nСписок автомобилей: \n"); using (FileStream FS = new FileStream(DirectoryPath, FileMode.Open)) { using (StreamReader SR = new StreamReader(FS, Encoding.UTF8)) { while ((OutputLine = SR.ReadLine()) != null) { OutputLineArray = OutputLine.Split(' '); for (int i = 0; i < OutputLineArray.Count(); i++) { switch (i) { case 0: Console.Write("Гос. номер: "); break; case 1: Console.Write("Марка: "); break; case 2: Console.Write("Цвет: "); break; case 3: Console.Write("Год выпуска: "); break; case 4: Console.Write("Пробег(км): "); break; } Console.WriteLine(OutputLineArray[i]); } } } } }//Вывод списка //Добавление автомобиля int AddCar(JToken json) { IsDBExist(); string CheckLP = ""; string[] a = new string[NumOfParameters]; string JSON; using (StreamReader SR = new StreamReader(jsonPath)) { JSON = SR.ReadToEnd(); } dynamic array = JsonConvert.DeserializeObject(JSON); foreach (var item in array) { CheckLP = item.LicensePlate; } //Проверка на существование номера в базе if (IsLPExist(CheckLP) == true) { Console.WriteLine("Ошибка. Автомобиль с регистрационным знаком " + CheckLP + " уже существует."); return(1); } //Проверка на правильный формат номера (данные регионов на 2020 год) //Обычный номер Regex NormalLP = new Regex(@"(А|В|Е|К|М|Н|О|Р|С|Т|У|Х){1}\d{3}(А|В|Е|К|М|Н|О|Р|С|Т|У|Х){2}(01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|102|113|116|121|122|123|124|125|126|134|136|138|142|147|150|152|154|156|159|161|163|164|173|174|177|178|186|190|193|196|197|198|199|702|750|716|761|763|774|777|790|797|799){1}$"); //Транзитный номер Regex TransitLP = new Regex(@"(А|В|Е|К|М|Н|О|Р|С|Т|У|Х){2}\d{3}(А|В|Е|К|М|Н|О|Р|С|Т|У|Х){1}(01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|102|113|116|121|122|123|124|125|126|134|136|138|142|147|150|152|154|156|159|161|163|164|173|174|177|178|186|190|193|196|197|198|199|702|750|716|761|763|774|777|790|797|799){1}$"); //Обычный номер с 000 (исключение) Regex ExceptionNormalLP = new Regex(@"(А|В|Е|К|М|Н|О|Р|С|Т|У|Х){1}000(А|В|Е|К|М|Н|О|Р|С|Т|У|Х){2}(01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|102|113|116|121|122|123|124|125|126|134|136|138|142|147|150|152|154|156|159|161|163|164|173|174|177|178|186|190|193|196|197|198|199|702|750|716|761|763|774|777|790|797|799){1}$"); //Транзитный номер с 000 (исключение) Regex ExceptionTransitLP = new Regex(@"(А|В|Е|К|М|Н|О|Р|С|Т|У|Х){2}000(А|В|Е|К|М|Н|О|Р|С|Т|У|Х){1}(01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|102|113|116|121|122|123|124|125|126|134|136|138|142|147|150|152|154|156|159|161|163|164|173|174|177|178|186|190|193|196|197|198|199|702|750|716|761|763|774|777|790|797|799){1}$"); MatchCollection MatchesNormalLP = NormalLP.Matches(CheckLP); MatchCollection MatchesTransitLP = TransitLP.Matches(CheckLP); MatchCollection MatchesExceptionNormalLP = ExceptionNormalLP.Matches(CheckLP); MatchCollection MatchesExceptionTransitLP = ExceptionTransitLP.Matches(CheckLP); if (MatchesExceptionNormalLP.Count > 0) { Console.WriteLine("Ошибка. Неверный формат номерного знака."); return(1); } if (MatchesExceptionTransitLP.Count > 0) { Console.WriteLine("Ошибка. Неверный формат номерного знака."); return(1); } if ((MatchesNormalLP.Count > 0) || (MatchesTransitLP.Count > 0)) { foreach (var item in array) { a[0] = item.LicensePlate; a[1] = item.Model; a[2] = item.Colour; a[3] = item.YearOfIssue; a[4] = item.Kilometrage; } for (int i = 0; i < a.Count(); i++) { File.AppendAllText(DirectoryPath, a[i]); File.AppendAllText(DirectoryPath, " "); } File.AppendAllText(DirectoryPath, "\n"); Console.WriteLine("Успешно. Автомобиль с регистрационным знаком " + CheckLP + " добавлен."); return(0); } Console.WriteLine("Ошибка. Неверный формат номерного знака."); return(1); }//Добавление автомобиля //Удаление автомобиля int DeleteCar(JToken LP) { IsDBExist(); //Проверка на существование номера в базе if (IsLPExist(System.Convert.ToString(LP)) == true) { File.WriteAllLines(DirectoryPath, File.ReadAllLines(DirectoryPath).Where(v => v.Trim().IndexOf(System.Convert.ToString(LP)) == -1).ToArray(), Encoding.UTF8); Console.WriteLine("Успешно. Автомобиль с регистрационным знаком " + System.Convert.ToString(LP) + " удалён из базы."); return(0); } Console.WriteLine("Ошибка. Автомобиль с регистрационным знаком " + LP + " отсутсвует в базе."); return(1); }//Удаление автомобиля //Статистика базы void Statistic() { IsDBExist(); Console.WriteLine("\nСтатистика: "); int NumberOfRows = System.IO.File.ReadAllLines(DirectoryPath).Length; Console.WriteLine("Количество записей: " + NumberOfRows); DateTime LastEdit = File.GetLastWriteTime(DirectoryPath); Console.WriteLine("Последнее обращение к базе: " + LastEdit); DateTime CreationDate = File.GetCreationTime(DirectoryPath); Console.WriteLine("Дата создания базы: " + CreationDate); }//Статистика базы //AddCar(jsonPath); //DeleteCar("М001ММ77"); Output(); //Statistic(); }