public DisplacementDocumentWaybill(DisplacementDoc d, IList <DisplacementLine> lines, WaybillSettings waybillSettings) { this.d = d; this.lines = lines; this.waybillSettings = waybillSettings; ((IDocumentPaginatorSource)doc).DocumentPaginator.PageSize = new Size(1069, 756); BlockStyle = new Style(typeof(Paragraph)) { Setters = { new Setter(Control.FontSizeProperty, 10d), new Setter(System.Windows.Documents.Block.MarginProperty, new Thickness(0, 3, 0, 3)) } }; HeaderStyle = new Style(typeof(Run), HeaderStyle) { Setters = { new Setter(Control.FontSizeProperty, 12d), } }; TableHeaderStyle = new Style(typeof(TableCell), TableHeaderStyle) { Setters = { new Setter(Control.FontSizeProperty, 10d), } }; }
public void Process_protek_waybills() { var settings = WaybillSettings.Find(order1.Client.Id); //Формат сохранения в dbf теперь не является форматом по умолчанию settings.ProtekWaybillSavingType = WaybillFormat.ProtekDbf; settings.Save(); fake.Process(); var documents = Documents(); Assert.That(documents.Count, Is.EqualTo(1)); var document = documents[0]; Assert.That(document.Lines.Count, Is.EqualTo(1)); var line = document.Lines[0]; Assert.That(line.Product, Is.EqualTo("Коринфар таб п/о 10мг № 50")); Assert.That(line.NdsAmount, Is.EqualTo(12.3)); var log = document.Log; Assert.That(log, Is.Not.Null); Assert.That(log.FileName, Is.EqualTo(String.Format("{0}.dbf", log.Id))); Assert.That(log.DocumentSize, Is.GreaterThan(0)); Check_DocumentLine_SetProductId(document); }
public ReturnWaybill(ReturnDoc returnToSupplier, WaybillSettings waybillSettings, User user) { _returnToSupplier = returnToSupplier; _waybillSettings = waybillSettings; _user = user; doc.PagePadding = new Thickness(29); ((IDocumentPaginatorSource)doc).DocumentPaginator.PageSize = new Size(1069, 756); BlockStyle = new Style(typeof(Paragraph)) { Setters = { new Setter(Control.FontSizeProperty, 10d), new Setter(System.Windows.Documents.Block.MarginProperty, new Thickness(0, 3, 0, 3)) } }; HeaderStyle = new Style(typeof(Run), HeaderStyle) { Setters = { new Setter(Control.FontSizeProperty, 12d), } }; TableHeaderStyle = new Style(typeof(TableCell), TableHeaderStyle) { Setters = { new Setter(Control.FontSizeProperty, 10d), } }; }
public void ProcessProtekWaybillsSst() { var settings = WaybillSettings.Find(order1.Client.Id); //По умолчанию форматом сохранения является формат sst Assert.That(settings.ProtekWaybillSavingType, Is.EqualTo(WaybillFormat.Sst)); fake.Process(); var documents = Documents(); Assert.That(documents.Count, Is.EqualTo(1)); var document = documents[0]; Assert.That(document.Lines.Count, Is.EqualTo(1)); var line = document.Lines[0]; Assert.That(line.Product, Is.EqualTo("Коринфар таб п/о 10мг № 50")); Assert.That(line.NdsAmount, Is.EqualTo(12.3)); var log = document.Log; Assert.That(log, Is.Not.Null); Assert.That(log.FileName, Is.EqualTo(String.Format("{0}.sst", log.Id))); Assert.That(log.DocumentSize, Is.GreaterThan(0)); Check_DocumentLine_SetProductId(document); }
public void Update_address() { var fixtureAddressChange = Fixture <CreateAddress>(); var fixtureAddressNotChange = Fixture <CreateAddress>(); User user = new User(); Address AddressChange = new Address("тестовый адрес доставки до изменения"); WaybillSettings WaybillSettingsChange = new WaybillSettings(user, AddressChange); Address AddressNotChange = new Address("тестовый адрес доставки до изменения"); WaybillSettings WaybillSettingsNotChange = new WaybillSettings(user, AddressNotChange); using (var transaction = localSession.BeginTransaction()) { AddressChange.Id = fixtureAddressChange.Address.Id; AddressNotChange.Id = fixtureAddressNotChange.Address.Id; WaybillSettingsChange.Address = "тестовый адрес доставки до изменения"; WaybillSettingsNotChange.Address = "тестовый адрес доставки после ручного изменения"; localSession.Save(AddressChange); localSession.Save(AddressNotChange); localSession.Save(WaybillSettingsChange); localSession.Save(WaybillSettingsNotChange); transaction.Commit(); } localSession.Clear(); Run(new UpdateCommand()); WaybillSettingsChange = localSession.Query <WaybillSettings>().FirstOrDefault(x => x.BelongsToAddress.Id == AddressChange.Id); Assert.AreEqual(fixtureAddressChange.Address.Value, WaybillSettingsChange.Address); WaybillSettingsNotChange = localSession.Query <WaybillSettings>().FirstOrDefault(x => x.BelongsToAddress.Id == AddressNotChange.Id); Assert.AreEqual("тестовый адрес доставки после ручного изменения", WaybillSettingsNotChange.Address); }
public DisplacementWDocument(DisplacementDoc d, IList <DisplacementLine> lines, WaybillSettings waybillSettings, RequirementWaybillName result) { requirementWaybillName = result; doc.PagePadding = new Thickness(29); ((IDocumentPaginatorSource)doc).DocumentPaginator.PageSize = new Size(1069, 756); this.d = d; this.lines = lines; this.waybillSettings = waybillSettings; BlockStyle = new Style(typeof(Paragraph)) { Setters = { new Setter(Control.FontSizeProperty, 10d), new Setter(System.Windows.Documents.Block.MarginProperty, new Thickness(0, 3, 0, 3)) } }; HeaderStyle = new Style(typeof(Run), HeaderStyle) { Setters = { new Setter(Control.FontSizeProperty, 14d), new Setter(Control.FontWeightProperty, FontWeights.Normal), } }; TableHeaderStyle = new Style(typeof(TableCell), TableHeaderStyle) { Setters = { new Setter(Control.FontSizeProperty, 10d), } }; }
public static bool ConvertIfNeeded(Document document, WaybillSettings settings) { return(SessionHelper.WithSession(x => { if (document.SetAssortimentInfo(x, settings)) { ConvertAndSave(document, settings.WaybillConvertFormat, settings); return true; } return false; })); }
public void Setup() { address = new Address("Тестовый"); settings = new Settings(address); settings.Markups.Each(x => x.Address = address); waybillSettings = new WaybillSettings(); settings.Waybills.Add(waybillSettings); waybill = new Waybill { Address = address }; }
public void Setup() { client = TestClient.Create(session); testAddress = client.Addresses[0]; address = Address.Find(testAddress.Id); settings = WaybillSettings.Find(client.Id); supplier = TestSupplier.CreateNaked(session); price = supplier.Prices[0]; appSupplier = Supplier.Find(supplier.Id); docRoot = Path.Combine(Settings.Default.DocumentPath, address.Id.ToString()); waybillsPath = Path.Combine(docRoot, "Waybills"); Directory.CreateDirectory(waybillsPath); }
public void ConvertWaybillToDBFWithAssortmentCodes() { var doc = WaybillParser.Parse("9046752.DBF"); settings.IsConvertFormat = true; settings.AssortimentPriceId = price.Id; settings.Save(); var order = TestOrder.FindFirst(); var address = Address.Find(client.Addresses[0].Id); var log = new DocumentReceiveLog { Supplier = Supplier.Find(supplier.Id), ClientCode = settings.Id, Address = address, MessageUid = 123, DocumentSize = 100 }; doc.Log = log; doc.OrderId = order.Id; doc.Address = address; doc.FirmCode = log.Supplier.Id; doc.ClientCode = (uint)log.ClientCode; doc.SetProductId(); var path = Path.GetDirectoryName(log.GetRemoteFileNameExt()); Directory.Delete(path, true); Exporter.ConvertIfNeeded(doc, WaybillSettings.Find(doc.ClientCode)); var files_dbf = Directory.GetFiles(path, "*.dbf"); Assert.That(files_dbf.Count(), Is.EqualTo(1)); var file_dbf = files_dbf[0]; var data = Dbf.Load(file_dbf, Encoding.GetEncoding(866)); Assert.That(data.Rows.Count, Is.EqualTo(45)); Assert.IsTrue(data.Columns.Contains("ID_ARTIS")); Assert.IsTrue(data.Columns.Contains("NAME_ARTIS")); Assert.IsTrue(data.Columns.Contains("NAME_POST")); Assert.That(data.Rows[0]["NAME_POST"], Is.EqualTo("Амоксициллин 500мг таб. Х20 (R)")); Assert.That(data.Rows[1]["NAME_POST"], Is.EqualTo("Андипал Таб Х10")); Assert.That(data.Rows[0]["ID_ARTIS"], Is.Not.EqualTo("100208")); Assert.That(data.Rows[0]["NAME_ARTIS"], Is.Not.EqualTo("МилдронатR р-р д/ин., 10 % 5 мл № 10")); Assert.That(data.Rows[1]["ID_ARTIS"], Is.Not.EqualTo("100208")); Assert.That(data.Rows[1]["NAME_ARTIS"], Is.Not.EqualTo("МилдронатR р-р д/ин., 10 % 5 мл № 10")); }
private void ChangeAdress(List <Address> ListAdresesBeforeImport) { var ListAdresesAfterImport = Session.Query <Address>().OrderBy(a => a.Name).ToList(); var result = ListAdresesAfterImport.Where(n => ListAdresesBeforeImport.Any(t => t.Id == n.Id && t.Name != n.Name)); foreach (var adr in result) { WaybillSettings waybillSettings = Session.Query <WaybillSettings>().FirstOrDefault(x => x.BelongsToAddress.Id == adr.Id); if (ListAdresesBeforeImport.Where(n => n.Id == waybillSettings.BelongsToAddress.Id && n.Name == waybillSettings.Address).Count() > 0) { waybillSettings.Address = adr.Name; Session.Save(waybillSettings); } } }
public static void SaveProtek(Document document) { var settings = WaybillSettings.Find(document.ClientCode); var log = document.Log; var converted = ConvertIfNeeded(document, settings); var lipetskFarmaciaFlag = settings.IsConvertFormat && settings.WaybillConvertFormat == WaybillFormat.LipetskFarmacia; if (!converted || lipetskFarmaciaFlag) { ConvertAndSave(document, settings.ProtekWaybillSavingType, settings); //липецкфармации мы даем 2 файла, но экспорт - делает фейковым изначальный лог файла и заменяет его, поэтому надо ручками сделать его не фейковым if (lipetskFarmaciaFlag) { log.IsFake = false; } } }
public RegistryDocument(Waybill waybill, IList <WaybillLine> lines) { this.waybill = waybill; this.lines = lines; doc.PagePadding = new Thickness(29); //мнения о размере страницы разошлись //придерживаемся мнения delphi тк размеры колонок скопированы от туда ((IDocumentPaginatorSource)doc).DocumentPaginator.PageSize = new Size(1069, 756); settings = waybill.WaybillSettings; docSettings = waybill.GetRegistryDocSettings(); Settings = docSettings; BlockStyle = new Style(typeof(Paragraph)) { Setters = { new Setter(Control.FontSizeProperty, 10d), new Setter(System.Windows.Documents.Block.MarginProperty, new Thickness(0, 3, 0, 3)) } }; HeaderStyle = new Style(typeof(Run), HeaderStyle) { Setters = { new Setter(Control.FontSizeProperty, 12d), new Setter(Control.FontWeightProperty, FontWeights.Normal), } }; TableHeaderStyle = new Style(typeof(TableCell), TableHeaderStyle) { Setters = { new Setter(Control.FontSizeProperty, 10d), } }; TableStyle = new Style(typeof(Table), TableStyle) { Setters = { new Setter(Control.FontSizeProperty, 10d), } }; }
public WaybillActDocument(Waybill waybill, IList <WaybillLine> lines) { doc.PagePadding = new Thickness(29); ((IDocumentPaginatorSource)doc).DocumentPaginator.PageSize = new Size(1069, 756); this.waybill = waybill; this.settings = waybill.WaybillSettings; this.lines = lines; docSettings = waybill.GetWaybillActDocSettings(); Settings = docSettings; BlockStyle = new Style(typeof(Paragraph)) { Setters = { new Setter(Control.FontSizeProperty, 10d), new Setter(System.Windows.Documents.Block.MarginProperty, new Thickness(0, 3, 0, 3)) } }; HeaderStyle = new Style(typeof(Run), HeaderStyle) { Setters = { new Setter(Control.FontSizeProperty, 14d), new Setter(Control.FontWeightProperty, FontWeights.Normal), new Setter(System.Windows.Documents.Block.MarginProperty, new Thickness(0, 0, 0, 0)) } }; TableHeaderStyle = new Style(typeof(TableCell), TableHeaderStyle) { Setters = { new Setter(Control.FontSizeProperty, 10d), } }; CellStyle = new Style(typeof(TableCell), CellStyle) { Setters = { new Setter(Control.FontSizeProperty, 10d), } }; }
private static Document ProcessWaybill(DocumentReceiveLog log, string filename) { if (log.DocumentType == DocType.Reject) { return(null); } var settings = WaybillSettings.Find(log.ClientCode.Value); if (log.DocumentSize == 0) { return(null); } // ждем пока файл появится в удаленной директории if (!log.FileIsLocal()) { ShareFileHelper.WaitFile(filename, 5000); } var doc = SessionHelper.WithSession(s => { var detector = new WaybillFormatDetector(); var result = detector.Parse(s, filename, log); WaybillFormatDetector.Process(s, result); return(result); }); // для мульти файла, мы сохраняем в источнике все файлы, // а здесь, если нужна накладная в dbf формате, то сохраняем merge-файл в dbf формате. if (doc != null) { Exporter.ConvertIfNeeded(doc, settings); } return(doc); }
public static void Convert(Document document, DocumentReceiveLog log, WaybillFormat type, WaybillSettings settings) { if (String.IsNullOrEmpty(document.Log.FileName)) { var extention = settings.GetExportExtension(type); log.IsFake = false; var id = (document.ProviderDocumentId ?? document.Log.Id.ToString()).Replace('/', '_'); log.FileName = id + extention; } var filename = log.GetRemoteFileNameExt(); if (type == WaybillFormat.ProtekDbf) { DbfExporter.SaveProtek(document, filename); } else if (type == WaybillFormat.LessUniversalDbf) { DbfExporter.SaveUniversalV1(document, filename); } else if (type == WaybillFormat.UniversalDbf) { DbfExporter.SaveUniversalV2(document, filename); } else if (type == WaybillFormat.LipetskFarmacia) { document.Log.IsFake = false; ExcelExporter.SaveLipetskFarmacia(document, filename); } else if (type == WaybillFormat.InfoDrugstoreXml) { using (var session = SessionHelper.GetSessionFactory().OpenSession()) XmlExporter.SaveInfoDrugstore(session, settings, document, filename); } else if (type == WaybillFormat.InproXml) { using (var session = SessionHelper.GetSessionFactory().OpenSession()) { var map = session.Query <SupplierMap>().ToList(); XmlExporter.SaveInpro(document, log, filename, map); } } else { using (var fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite)) { using (var sw = new StreamWriter(fs, Encoding.GetEncoding(1251))) { if (type == WaybillFormat.Sst) { SstExport.SaveShort(document, sw); } else { SstExport.SaveLong(document, sw); } } } } log.DocumentSize = new FileInfo(filename).Length; }
public static FlowDocument BuildFlowDoc(Waybill waybill, IList <WaybillLine> lines, WaybillSettings settings, Func <WaybillLine, FrameworkElement> map, double borderThickness) { var document = new FlowDocument(); document.PagePadding = new Thickness(0, 0, 0, 0); var left = lines.Count; while (left > 0) { var border = new Border { Margin = new Thickness(1) }; var section = new Section(); section.BreakPageBefore = true; var leftSize = new Size(pageSize.Width - border.Margin.Left - border.Margin.Right, pageSize.Height - border.DesiredSize.Height - border.Margin.Top - border.Margin.Bottom); var grid = new BlockUIContainer(BuildMapGrid(i => map(lines[i]), lines.Count, leftSize, ref left, borderThickness)); section.Blocks.Add(grid); document.Blocks.Add(section); } return(document); }
public static DocumentReceiveLog ConvertAndSave(Document document, WaybillFormat type, WaybillSettings settings) { var extention = settings.GetExportExtension(type); var log = document.Log; //если нет файла значит документ из сервиса протека и ему можно просто назначить файл //если мы конвертируем существующий файл то нужно создать новую запись а стурую отметить флагом //что бы избежать загрузки ее клиентом if (!String.IsNullOrEmpty(document.Log.FileName)) { log.IsFake = true; ActiveRecordMediator.SaveAndFlush(log); log = new DocumentReceiveLog(log, extention); ActiveRecordMediator.SaveAndFlush(log); } Convert(document, log, type, settings); ActiveRecordMediator.Save(document.Log); ActiveRecordMediator.Save(log); return(log); }
public static void SaveInfoDrugstore(ISession session, WaybillSettings settings, Document document, string filename) { var addressId = session.CreateSQLQuery(@" select ai.SupplierDeliveryId from Customers.Intersection i join Customers.AddressIntersection ai on ai.IntersectionId = i.Id where ai.AddressId = :addressId and ai.SupplierDeliveryId is not null and i.PriceId = :priceId group by ai.SupplierDeliveryId") .SetParameter("addressId", document.Address.Id) .SetParameter("priceId", settings.AssortimentPriceId) .List <string>() .FirstOrDefault(); var xmlsettings = new XmlWriterSettings { Encoding = Encoding.GetEncoding(1251) }; using (var writer = XmlWriter.Create(filename, xmlsettings)) { writer.WriteStartDocument(true); writer.WriteStartElement("PACKET"); writer.WriteAttributeString("NAME", "Электронная накладная"); writer.WriteAttributeString("ID", document.ProviderDocumentId); writer.WriteAttributeString("FROM", document.Log.Supplier.Name); writer.WriteAttributeString("TYPE", "12"); writer.WriteStartElement("SUPPLY"); writer.Element("INVOICE_NUM", document.ProviderDocumentId); writer.Element("INVOICE_DATE", document.DocumentDate.Value.ToString("dd.MM.yyyy")); writer.Element("DEP_ID", addressId); writer.Element("ORDER_ID", document.OrderId); writer.WriteStartElement("ITEMS"); foreach (var line in document.Lines) { writer.WriteStartElement("ITEM"); writer.Element("CODE", line.ExportCode); writer.Element("NAME", line.ExportProduct); writer.Element("VENDOR", line.ExportProducer); writer.Element("QTTY", line.Quantity); writer.Element("SPRICE", line.SupplierCostWithoutNDS); writer.Element("VPRICE", line.ProducerCostWithoutNDS); writer.Element("NDS", line.Nds); writer.Element("SNDSSUM", line.NdsAmount); writer.Element("SERIA", line.SerialNumber); writer.Element("VALID_DATE", line.Period); writer.Element("GTD", line.BillOfEntryNumber); writer.Element("SERT_NUM", line.Certificates); writer.Element("VENDORBARCODE", line.EAN13.ToString().Slice(12)); writer.Element("REG_PRICE", line.RegistryCost); writer.Element("ISGV", line.VitallyImportant); writer.WriteEndElement(); } writer.WriteEndElement(); //ITEMS writer.WriteEndElement(); //SUPPLY writer.WriteEndElement(); //PACKET } }
public ReturnToSuppliersDetailsDocument(ReturnLine[] items, ReturnDoc doc, WaybillSettings waybillSettings) { _items = items; _doc = doc; _waybillSettings = waybillSettings; }
public virtual void Print(string printer, WaybillSettings settings) { var dialog = new PrintDialog(); dialog.PrintQueue = new PrintQueue(new PrintServer(), printer); var doc = new FlowDocument(); doc.ColumnGap = 0; doc.PagePadding = new Thickness(0, 0, 0, 0); doc.ColumnWidth = double.PositiveInfinity; doc.FontFamily = new FontFamily("Arial"); var width = dialog.PrintableAreaWidth; doc.PageWidth = width; doc.Blocks.Add(new Paragraph(new Run(settings.FullName) { FontSize = 20, }) { TextAlignment = TextAlignment.Center }); var table = new Table(); table.CellSpacing = 0; var value = width / 2; table.Columns.Add(new TableColumn { Width = new GridLength(value, GridUnitType.Pixel) }); table.Columns.Add(new TableColumn { Width = new GridLength(value, GridUnitType.Pixel) }); var tableRowGroup = new TableRowGroup(); tableRowGroup.Rows.Add(new TableRow { Cells = { new TableCell(new Paragraph(new Run($"Чек №{Id}"))) { FontSize = 8, }, new TableCell(new Paragraph(new Run(Date.ToString()))) { TextAlignment = TextAlignment.Right, FontSize = 8 }, } }); table.RowGroups.Add(tableRowGroup); var paragraph = new Paragraph() { FontSize = 10, BorderBrush = Brushes.Black, BorderThickness = new Thickness(0, 1, 0, 0) }; doc.Blocks.Add(table); doc.Blocks.Add(paragraph); foreach (var line in Lines) { paragraph.Inlines.Add(new Run($"{line.Product} {line.RetailCost:C} x {line.Quantity} = {line.Sum:C}")); paragraph.Inlines.Add(new LineBreak()); } doc.Blocks.Add(new Paragraph() { Inlines = { new Run($"Итого = {Sum:C}") { FontSize = 20, FontWeight = FontWeights.Bold, }, new LineBreak(), new Run($"Наличными = {Payment:C}") { FontSize = 10, }, new LineBreak(), new Run($"Картой = {PaymentByCard:C}") { FontSize = 10, }, new LineBreak(), new Run($"Сдача = {Charge:C}") { FontSize = 10 } }, BorderBrush = Brushes.Black, BorderThickness = new Thickness(0, 1, 0, 0) }); doc.Blocks.Add(new Paragraph(new LineBreak())); doc.Blocks.Add(new Paragraph(new LineBreak())); dialog.PrintDocument(((IDocumentPaginatorSource)doc).DocumentPaginator, "Чек"); }