Explorar o código

1.0.1 (2024-09-27)

- Přidána podpora generování protokolu (.csv)
- Rozšíření datové stuktury o položky, OutputFileName, ExternalOrder, ExternalOrderDate
- Oprav chyb UI
Dalibor Votruba hai 1 ano
pai
achega
42918444a0
Modificáronse 9 ficheiros con 448 adicións e 8 borrados
  1. 14 1
      FormMain.Designer.cs
  2. 39 0
      FormMain.cs
  3. 12 1
      FormMain.resx
  4. 10 1
      README.md
  5. 5 5
      Setup/Setup.vdproj
  6. 167 0
      dlgProtocol.Designer.cs
  7. 72 0
      dlgProtocol.cs
  8. 123 0
      dlgProtocol.resx
  9. 6 0
      qdr.app.studiou.orders2printpack.csproj

+ 14 - 1
FormMain.Designer.cs

@@ -53,6 +53,7 @@
             tsMain = new ToolStrip();
             tsbCheck = new ToolStripButton();
             tsbDo = new ToolStripButton();
+            tsbProtocol = new ToolStripButton();
             toolStripSeparator1 = new ToolStripSeparator();
             tsbAddSourceDir = new ToolStripButton();
             toolStripSeparator2 = new ToolStripSeparator();
@@ -288,7 +289,7 @@
             // tsMain
             // 
             tsMain.ImageScalingSize = new Size(20, 20);
-            tsMain.Items.AddRange(new ToolStripItem[] { tsbCheck, tsbDo, toolStripSeparator1, tsbAddSourceDir, toolStripSeparator2, tsbSettings });
+            tsMain.Items.AddRange(new ToolStripItem[] { tsbCheck, tsbDo, tsbProtocol, toolStripSeparator1, tsbAddSourceDir, toolStripSeparator2, tsbSettings });
             tsMain.Location = new Point(0, 0);
             tsMain.Name = "tsMain";
             tsMain.Size = new Size(895, 27);
@@ -317,6 +318,17 @@
             tsbDo.Text = "2. Spusť";
             tsbDo.Click += tsbDo_Click;
             // 
+            // tsbProtocol
+            // 
+            tsbProtocol.BackColor = Color.PaleTurquoise;
+            tsbProtocol.DisplayStyle = ToolStripItemDisplayStyle.Text;
+            tsbProtocol.Image = (Image)resources.GetObject("tsbProtocol.Image");
+            tsbProtocol.ImageTransparentColor = Color.Magenta;
+            tsbProtocol.Name = "tsbProtocol";
+            tsbProtocol.Size = new Size(80, 24);
+            tsbProtocol.Text = "3.Protokol";
+            tsbProtocol.Click += tsbProtocol_Click;
+            // 
             // toolStripSeparator1
             // 
             toolStripSeparator1.Name = "toolStripSeparator1";
@@ -486,5 +498,6 @@
         private ListBox lbNotMapped;
         private ToolStripSeparator toolStripSeparator2;
         private ToolStripButton tsbSettings;
+        private ToolStripButton tsbProtocol;
     }
 }

+ 39 - 0
FormMain.cs

@@ -2,6 +2,7 @@
 using Quadarax.Foundation.Core.Data;
 using Quadarax.Foundation.Core.IO;
 using Quadarax.Foundation.Core.Value;
+using Quadarax.Foundation.Core.Value.Extensions;
 using System.Data;
 using System.IO.Abstractions;
 
@@ -12,6 +13,9 @@ namespace qdr.app.studiou.orders2printpack
         #region *** Constants ***
         private const string CS_COL_SOURCE_PATH = "LocalPath";
         private const string CS_COL_ID = "LocalID";
+        private const string CS_COL_OUTPUT = "OutputFileName";
+        private const string CS_COL_EXTERNALORDER = "ExternalOrder";
+        private const string CS_COL_EXTERNALORDERDATE = "ExternalOrderDate";
         private const string CS_TAG_LB = "{";
         private const string CS_TAG_RB = "}";
         private const string CS_TAG_EXT = "ext";
@@ -89,12 +93,14 @@ namespace qdr.app.studiou.orders2printpack
         private void tsbCheck_Click(object sender, EventArgs e)
         {
             CheckSourceOrderFile();
+            RefreshToolButtons();
         }
 
         [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "<Pending>")]
         private void tsbDo_Click(object sender, EventArgs e)
         {
             ProcessSourceFile();
+            RefreshToolButtons();
         }
 
         [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "<Pending>")]
@@ -112,6 +118,14 @@ namespace qdr.app.studiou.orders2printpack
             RefreshToolButtons();
         }
 
+        [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "<Pending>")]
+        private void tsbProtocol_Click(object sender, EventArgs e)
+        {
+           var dlg = new dlgProtocol();
+           if (dlg.ShowDialog(this) == DialogResult.OK)
+                GenerateProtocol(dlg.ExternalOrder, dlg.ExternalOrderDate, dlg.ProtocolFile);
+        }
+
         [System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE1006:Naming Styles", Justification = "<Pending>")]
         private void lbNotMapped_MouseDoubleClick(object sender, MouseEventArgs e)
         {
@@ -216,6 +230,9 @@ namespace qdr.app.studiou.orders2printpack
                 _source = CsvHelper.CsvToDataTable(_fs, fileName, AppSettings.Default.CSVDelimiter);
                 _source.Columns.Add(new DataColumn(CS_COL_SOURCE_PATH, typeof(string)));
                 _source.Columns.Add(new DataColumn(CS_COL_ID, typeof(int)));
+                _source.Columns.Add(new DataColumn(CS_COL_OUTPUT, typeof(string)));
+                _source.Columns.Add(new DataColumn(CS_COL_EXTERNALORDER, typeof(string)));
+                _source.Columns.Add(new DataColumn(CS_COL_EXTERNALORDERDATE, typeof(string)));
                 _sourceColOrdinals.Clear();
                 for (int i = 0; i < _source.Columns.Count; i++)
                     _sourceColOrdinals.Add(_source.Columns[i].ColumnName.Replace("\"", ""), i);
@@ -318,6 +335,7 @@ namespace qdr.app.studiou.orders2printpack
                         var outputPath = _fs.Path.Combine(_outputPath, outputFileName);
                         _fs.File.Copy(sourcePath!, outputPath, true);
                         Log($"Soubor '{outputPath}' vytvořen.");
+                        row.SetField(_sourceColOrdinals[CS_COL_OUTPUT], outputPath);
                     }
 
                     ssProgress.Increment(1);
@@ -326,6 +344,23 @@ namespace qdr.app.studiou.orders2printpack
             ssProgress.Value = 0;
         }
 
+
+        private void GenerateProtocol(string externalOrder, DateTime externalOrderDate, string protocolFile)
+        {
+            BlockErrorHandled(() =>
+            {
+                Log($"Nastavuji číslo externí objednávky: {externalOrder} a datum: {externalOrderDate.ToShortDateString()} ...");
+                foreach(var row in _source.AsEnumerable())
+                {
+                    row.SetField(_sourceColOrdinals[CS_COL_EXTERNALORDER], externalOrder);
+                    row.SetField(_sourceColOrdinals[CS_COL_EXTERNALORDERDATE], externalOrderDate.ToFileUtcString());
+                }
+                Log($"Generuji protokol ...");
+                CsvHelper.DataTableToCsv(_fs, _source, protocolFile, AppSettings.Default.CSVDelimiter);
+                Log($"Protokol uložen do souboru '{protocolFile}'.");   
+            });
+        }
+
         #endregion
 
 
@@ -334,9 +369,11 @@ namespace qdr.app.studiou.orders2printpack
         {
             var canBeChecked = GetOrderCount() > 0 && _sourcePathCache.Count > 0;
             var canBeProcess = canBeChecked && !_source.AsEnumerable().Any(x => string.IsNullOrEmpty(x.Field<string>(_sourceColOrdinals[CS_COL_SOURCE_PATH]))) && !string.IsNullOrEmpty(_outputPath);
+            var canBeCreateProtocol = canBeProcess && _source.AsEnumerable().All(x => !string.IsNullOrEmpty(x.Field<string>(_sourceColOrdinals[CS_COL_OUTPUT])));
 
             tsbCheck.Enabled = canBeChecked;
             tsbDo.Enabled = canBeProcess;
+            tsbProtocol.Enabled = canBeCreateProtocol;
 
             RefreshNotMappedList();
         }
@@ -365,5 +402,7 @@ namespace qdr.app.studiou.orders2printpack
 
 
         #endregion
+
+
     }
 }

+ 12 - 1
FormMain.resx

@@ -144,6 +144,17 @@
         U87f4aUApcXhnrI9Jzg/laQKFntXlHM+lSQK5psL5fvbp/JvJLGCQqmSWM5JkiCT84igXGtSrruKLQ0T
         luAdmZxHBG37FFuWBC/j5XKOmX8WAH7rcI6ZMffPgjQwN2bXJgDo/COBTpjneQ2dML0PY3cISreGe8HM
         qgAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="tsbProtocol.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+        YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAEKSURBVEhL3ZG9DsFQHMXvczDZvIOtXsHObuhqkViI3Quw
+        6CYmNoMYJJ0NBiFFIoIytOuf0+TeXP3yde+iyS+3OcP53Z4y3/dJJ4HAsiwyTVMp6BQCBIZhKAWdEcHV
+        vSlBmeB82NFy1KLluEWOPRC5MoHdMWhazwi4RJlALgf4EuT6BI+5kCsTrGddUY658E+QvyXYHq9UnRyC
+        U87f4aUApcXhnrI9Jzg/laQKFntXlHM+lSQK5psL5fvbp/JvJLGCQqmSWM5JkiCT84igXGtSrruKLQ0T
+        luAdmZxHBG37FFuWBC/j5XKOmX8WAH7rcI6ZMffPgjQwN2bXJgDo/COBTpjneQ2dML0PY3cISreGe8HM
+        qgAAAABJRU5ErkJggg==
 </value>
   </data>
   <data name="tsbAddSourceDir.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -178,7 +189,7 @@
     <value>399, 17</value>
   </metadata>
   <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>25</value>
+    <value>69</value>
   </metadata>
   <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>

+ 10 - 1
README.md

@@ -1,3 +1,12 @@
 # qdr.app.studiou.orders2printpack
 
-Proprietální řešení zpracování WooCommerce objednávek pro online tiskovou službu (WinForm)
+Proprietální řešení zpracování WooCommerce objednávek pro online tiskovou službu (WinForm)
+
+## Changelog
+### 1.0.0 (2024-09-27)
+- Přidána podpora generování protokolu (.csv)
+- Rozšíření datové stuktury o položky, OutputFileName, ExternalOrder, ExternalOrderDate
+- Oprav chyb UI
+
+### 1.0.0 (2024-09-27)
+- První verze

+ 5 - 5
Setup/Setup.vdproj

@@ -65,7 +65,7 @@
         "DisplayName" = "8:Release"
         "IsDebugOnly" = "11:FALSE"
         "IsReleaseOnly" = "11:TRUE"
-        "OutputFilename" = "8:Release\\Order2PrintPack_x64.msi"
+        "OutputFilename" = "8:Release\\Order2PrintPack.msi"
         "PackageFilesAs" = "3:2"
         "PackageFileSize" = "3:-2147483648"
         "CabType" = "3:1"
@@ -198,15 +198,15 @@
         {
         "Name" = "8:Microsoft Visual Studio"
         "ProductName" = "8:Order2PrintPack"
-        "ProductCode" = "8:{5EF40B52-3AD9-467B-B72E-27E1E114E304}"
-        "PackageCode" = "8:{E34E54CB-1637-4DB3-9C61-66C070F211E2}"
+        "ProductCode" = "8:{15D775F7-1884-4BEA-A818-BE6FD4115761}"
+        "PackageCode" = "8:{957F30D6-34A6-487F-9148-366CDD7D4695}"
         "UpgradeCode" = "8:{38F8DC1E-8290-49ED-A3D2-32BC6DD74325}"
         "AspNetVersion" = "8:2.0.50727.0"
         "RestartWWWService" = "11:FALSE"
         "RemovePreviousVersions" = "11:TRUE"
         "DetectNewerInstalledVersion" = "11:TRUE"
         "InstallAllUsers" = "11:FALSE"
-        "ProductVersion" = "8:1.0.0"
+        "ProductVersion" = "8:1.0.1"
         "Manufacturer" = "8:Quadarax"
         "ARPHELPTELEPHONE" = "8:"
         "ARPHELPLINK" = "8:"
@@ -734,7 +734,7 @@
         {
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_401EDA760B6F46889C1BF580F3C37DBF"
             {
-            "SourcePath" = "8:..\\obj\\x64\\Release\\net8.0-windows\\apphost.exe"
+            "SourcePath" = "8:..\\obj\\x86\\Release\\net8.0-windows\\apphost.exe"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_96DC0B7F01834A1BA713E7E8A0904D3E"

+ 167 - 0
dlgProtocol.Designer.cs

@@ -0,0 +1,167 @@
+namespace qdr.app.studiou.orders2printpack
+{
+    partial class dlgProtocol
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            butCancel = new Button();
+            butOk = new Button();
+            label1 = new Label();
+            tbExternalOrder = new TextBox();
+            label2 = new Label();
+            tbProtocolFile = new TextBox();
+            label3 = new Label();
+            butOpenProt = new Button();
+            dtExternaOrderDate = new DateTimePicker();
+            dlgSave = new SaveFileDialog();
+            SuspendLayout();
+            // 
+            // butCancel
+            // 
+            butCancel.Location = new Point(493, 278);
+            butCancel.Name = "butCancel";
+            butCancel.Size = new Size(94, 29);
+            butCancel.TabIndex = 0;
+            butCancel.Text = "Zrušit";
+            butCancel.UseVisualStyleBackColor = true;
+            butCancel.Click += butCancel_Click;
+            // 
+            // butOk
+            // 
+            butOk.Location = new Point(21, 278);
+            butOk.Name = "butOk";
+            butOk.Size = new Size(94, 29);
+            butOk.TabIndex = 1;
+            butOk.Text = "Ok";
+            butOk.UseVisualStyleBackColor = true;
+            butOk.Click += butOk_Click;
+            // 
+            // label1
+            // 
+            label1.AutoSize = true;
+            label1.Location = new Point(14, 10);
+            label1.Name = "label1";
+            label1.Size = new Size(227, 20);
+            label1.TabIndex = 2;
+            label1.Text = "Číslo objednávky z tiskové služby";
+            // 
+            // tbExternalOrder
+            // 
+            tbExternalOrder.Location = new Point(19, 32);
+            tbExternalOrder.Name = "tbExternalOrder";
+            tbExternalOrder.Size = new Size(568, 27);
+            tbExternalOrder.TabIndex = 3;
+            // 
+            // label2
+            // 
+            label2.AutoSize = true;
+            label2.Location = new Point(14, 66);
+            label2.Name = "label2";
+            label2.Size = new Size(240, 20);
+            label2.TabIndex = 4;
+            label2.Text = "Datum objednávky z tiskové služby";
+            // 
+            // tbProtocolFile
+            // 
+            tbProtocolFile.Location = new Point(19, 149);
+            tbProtocolFile.Name = "tbProtocolFile";
+            tbProtocolFile.ReadOnly = true;
+            tbProtocolFile.Size = new Size(523, 27);
+            tbProtocolFile.TabIndex = 7;
+            // 
+            // label3
+            // 
+            label3.AutoSize = true;
+            label3.Location = new Point(14, 127);
+            label3.Name = "label3";
+            label3.Size = new Size(126, 20);
+            label3.TabIndex = 6;
+            label3.Text = "Soubor protoloku";
+            // 
+            // butOpenProt
+            // 
+            butOpenProt.Location = new Point(555, 149);
+            butOpenProt.Name = "butOpenProt";
+            butOpenProt.Size = new Size(32, 29);
+            butOpenProt.TabIndex = 8;
+            butOpenProt.Text = "...";
+            butOpenProt.UseVisualStyleBackColor = true;
+            butOpenProt.Click += butOpenProt_Click;
+            // 
+            // dtExternaOrderDate
+            // 
+            dtExternaOrderDate.Format = DateTimePickerFormat.Short;
+            dtExternaOrderDate.Location = new Point(18, 93);
+            dtExternaOrderDate.Name = "dtExternaOrderDate";
+            dtExternaOrderDate.Size = new Size(569, 27);
+            dtExternaOrderDate.TabIndex = 9;
+            // 
+            // dlgSave
+            // 
+            dlgSave.DefaultExt = "*.csv";
+            dlgSave.Filter = "CSV file (*.csv)|*.csv";
+            dlgSave.RestoreDirectory = true;
+            dlgSave.Title = "Vyberte název pro soubor protokolu.";
+            // 
+            // dlgProtocol
+            // 
+            AutoScaleDimensions = new SizeF(8F, 20F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(606, 327);
+            Controls.Add(dtExternaOrderDate);
+            Controls.Add(butOpenProt);
+            Controls.Add(tbProtocolFile);
+            Controls.Add(label3);
+            Controls.Add(label2);
+            Controls.Add(tbExternalOrder);
+            Controls.Add(label1);
+            Controls.Add(butOk);
+            Controls.Add(butCancel);
+            FormBorderStyle = FormBorderStyle.FixedDialog;
+            MaximizeBox = false;
+            MinimizeBox = false;
+            Name = "dlgProtocol";
+            Text = "Generování protokolu";
+            Load += dlgProtocol_Load;
+            ResumeLayout(false);
+            PerformLayout();
+        }
+
+        #endregion
+
+        private Button butCancel;
+        private Button butOk;
+        private Label label1;
+        private TextBox tbExternalOrder;
+        private Label label2;
+        private TextBox tbProtocolFile;
+        private Label label3;
+        private Button butOpenProt;
+        private DateTimePicker dtExternaOrderDate;
+        private SaveFileDialog dlgSave;
+    }
+}

+ 72 - 0
dlgProtocol.cs

@@ -0,0 +1,72 @@
+using Quadarax.Foundation.Core.IO;
+using System.IO.Abstractions;
+
+namespace qdr.app.studiou.orders2printpack
+{
+    public partial class dlgProtocol : Form
+    {
+
+        #region *** Properties ***
+        public string ExternalOrder => tbExternalOrder.Text;
+        public DateTime ExternalOrderDate => dtExternaOrderDate.Value;
+        public string ProtocolFile => tbProtocolFile.Text;
+        #endregion
+
+        #region *** Fields ***
+        private readonly IFileSystem _fs = new FileSystem();
+        #endregion
+
+
+        #region *** Contructor ***
+        public dlgProtocol()
+        {
+            InitializeComponent();
+        }
+        #endregion
+
+        #region *** Form Handlers ***
+        private void dlgProtocol_Load(object sender, EventArgs e)
+        {
+            tbExternalOrder.Text = string.Empty;
+            tbProtocolFile.Text = string.Empty;
+        }
+
+        private void butOk_Click(object sender, EventArgs e)
+        {
+            if(tbExternalOrder.Text.Trim().Length == 0)
+            {
+                MessageBox.Show("Zadejte číslo externí objednávky", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                tbExternalOrder.Focus();
+                return;
+            }
+
+            if(tbProtocolFile.Text.Trim().Length == 0)
+            {
+                MessageBox.Show("Zadejte název souboru protokolu (*.csv)", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                butOpenProt.Focus();
+                return;
+            }
+
+
+            DialogResult = DialogResult.OK;
+            Close();
+        }
+
+        private void butCancel_Click(object sender, EventArgs e)
+        {
+            DialogResult = DialogResult.Cancel;
+            Close();
+        }
+
+        private void butOpenProt_Click(object sender, EventArgs e)
+        {
+            dlgSave.FileName = FileUtils.SanitizedFileName(_fs, $"protocol_border_{tbExternalOrder.Text}.csv", "_");
+
+            if (dlgSave.ShowDialog() == DialogResult.OK)
+            {
+                tbProtocolFile.Text = dlgSave.FileName;
+            }
+        }
+        #endregion
+    }
+}

+ 123 - 0
dlgProtocol.resx

@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="dlgSave.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>

+ 6 - 0
qdr.app.studiou.orders2printpack.csproj

@@ -16,6 +16,9 @@
     <SignAssembly>True</SignAssembly>
     <AssemblyOriginatorKeyFile>bo_strong_key_pair.snk</AssemblyOriginatorKeyFile>
     <Platforms>AnyCPU;x86;x64</Platforms>
+    <AssemblyVersion>1.0.1.0</AssemblyVersion>
+    <FileVersion>1.0.1.0</FileVersion>
+    <Version>1.0.1</Version>
   </PropertyGroup>
 
   <ItemGroup>
@@ -58,6 +61,9 @@
       <Generator>SettingsSingleFileGenerator</Generator>
       <LastGenOutput>AppSettings.Designer.cs</LastGenOutput>
     </None>
+    <None Update="README.md">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
   </ItemGroup>
 
 </Project>