예제 #1
0
        public void SaveSettings(Settings settings)
        {
            var dialog = new FormSaveSettings();

            switch (dialog.Execute())
            {
                case SaveResult.Current:
                    GenericSerializer.Serialize(settings, FileNameHelper.CurrentConfigFileName);
                    if (dialog.UpdateServiceSettings)
                    {
                        try
                        {
                            using (var connector = new TcpBinaryConnector<IManagementService>(
                                settings.Services.ManagementService.Port, PublicNames.ManagementService))
                            {
                                connector.RemoteObject.Settings = settings;
                            }
                        }
                        catch (System.Net.Sockets.SocketException)
                        {
                            MessageBox.Show(_serviceConnectionFailed, ConstHelper.СonfigurationUtility, 
                                MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        }
                    }
                    break;
                case SaveResult.Export:
                    GenericSerializer.Serialize(settings, dialog.FileName);
                    break;
            }
        }
예제 #2
0
 public void SaveSettings(Settings settings)
 {
     using (var connector = new EventSourceConnector(_terminalParams))
     {
         connector.OpenConnector();
         connector.Service.Settings = settings;
         connector.Service.EventLink.Post(EventSources.ManagementService,
             "Обновление конфигурации системы");
     }
 }
예제 #3
0
        public PrismaDataConverter(Settings terminalSettings, String mappingFileName)
            : base(terminalSettings)
        {
            // загружаем параметры сопоставления событий кассовой системы
            // пакету данных системы видеонаблюдения
            _space = GenericSerializer.Deserialize<MappingSpace>(mappingFileName);

            // создаем словарь с пользовательской логикой сопоставления 
            // для полей пакета данных системы видеонаблюдения
            _customLogicByPacketField = new Dictionary<CustomLogicByPacketFieldKey,
                Func<EventData, SystemEvent, PacketField, String>>();

            _customLogicByPacketField.Add(
                new CustomLogicByPacketFieldKey(0, "Префикс объекта"), (e, m, f) => "KKM");
            _customLogicByPacketField.Add(
                new CustomLogicByPacketFieldKey(0, "Номер ККМ"),
                (e, m, f) => TerminalSettings.Common.CashNo.ToField(f.DataSize));
            _customLogicByPacketField.Add(
                new CustomLogicByPacketFieldKey(0, "Код события"),
                (e, m, f) => m.ExternalId.ToField(f.DataSize));
            _customLogicByPacketField.Add(
                new CustomLogicByPacketFieldKey(0, "Номер чека"),
                (e, m, f) => e.ToReceiptField().ToField(f.DataSize));
            _customLogicByPacketField.Add(
                new CustomLogicByPacketFieldKey(0, "День"),
                (e, m, f) => DateTime.Today.ToString("dd").ToField(f.DataSize));
            _customLogicByPacketField.Add(
                new CustomLogicByPacketFieldKey(0, "Месяц"),
                (e, m, f) => DateTime.Today.ToString("MM").ToField(f.DataSize));
            _customLogicByPacketField.Add(
                new CustomLogicByPacketFieldKey(0, "Год"),
                (e, m, f) => DateTime.Today.ToString("yy").ToField(f.DataSize));
            _customLogicByPacketField.Add(
                new CustomLogicByPacketFieldKey(0, "Милисекунды"),
                (e, m, f) => DateTime.Now.ToString("fff").ToField(f.DataSize));
            _customLogicByPacketField.Add(
                new CustomLogicByPacketFieldKey(0, "Секунды"),
                (e, m, f) => DateTime.Now.ToString("ss").ToField(f.DataSize));
            _customLogicByPacketField.Add(
                new CustomLogicByPacketFieldKey(0, "Минуты"),
                (e, m, f) => DateTime.Now.ToString("mm").ToField(f.DataSize));
            _customLogicByPacketField.Add(
                new CustomLogicByPacketFieldKey(0, "Часы"),
                (e, m, f) => DateTime.Now.ToString("HH").ToField(f.DataSize));
            _customLogicByPacketField.Add(
                new CustomLogicByPacketFieldKey(26, "Сумма чека"),
                (e, m, f) => e.ToAmountField().ToField(f.DataSize));

            Func<EventData, SystemEvent, PacketField, String> getOriginalReceipt =
                (e, m, f) => e.ToOriginalReceiptField().ToField(f.DataSize);
            _customLogicByPacketField.Add(
                new CustomLogicByPacketFieldKey(53, "Номер чека"), getOriginalReceipt);
            _customLogicByPacketField.Add(
                new CustomLogicByPacketFieldKey(55, "Номер чека"), getOriginalReceipt);
        }
예제 #4
0
        private static Settings Convert(String fileName)
        {
            var settings = new Settings();
            var document = XDocument.Load(fileName);

            ConvertDatabase(document, settings);
            ConvertPayService(document, settings);
            ConvertCommon(document, settings);
            ConvertPrint(document, settings);
            ConvertOperations(document, settings);
            ConvertDiscounts(document, settings);
            ConvertBarcodeScanner(document, settings);
            ConvertCustomerDisplay(document, settings);
            ConvertScales(document, settings);
            ConvertManagementService(document, settings);
            ConvertExchangeService(document, settings);
            ConvertStatistics(document, settings);
            ConvertCashRegisters(document, settings);
            ConvertAdvertising(document, settings);
            ConvertBackupService(document, settings);
            ConvertExternalApps(document, settings);

            return settings;
        }
 /// <summary>
 /// Создает экземпляр класса
 /// </summary>
 /// <param name="terminalSettings">Параметры терминала</param>
 public DefaultEventDataConverter(Settings terminalSettings)
     : base(terminalSettings)
 {
 }
예제 #6
0
        private static void ConvertExternalApps(XDocument document, Settings settings)
        {
            settings.Applications.Items.Clear();

            for (var i = 1; i <= 9; i++)
            {
                var groupName = String.Format("Внешнее приложение {0}", i);
                if (document.GroupExists(groupName))
                {
                    ConvertExternalApp(document, settings, groupName);
                }
            }
        }
예제 #7
0
 private static void ConvertExternalApp(XDocument document, Settings settings, String groupName)
 {
     settings.Applications.Items.Add(new ExternalApplication
     {
         ExecutableName = document.ToString(String.Format("{0},Исполняемый файл", groupName)),
         Args = document.ToString(String.Format("{0},Аргументы командной строки", groupName)),
         Commentary = document.ToString(String.Format("{0},Комментарий", groupName))
     });
 }
예제 #8
0
 private static void ConvertAdvertising(XDocument document, Settings settings)
 {
     settings.Advertising.AdvOnDisplay = document.ToBoolean("Рекламный текст,Показывать на дисплее покупателя");
     settings.Advertising.AdvOnReceipt = document.ToBoolean("Рекламный текст,Печатать на чеках");
     settings.Advertising.PauseBetweenMessages = document.ToInt32("Рекламный текст,Интервал смены сообщений");
 }
예제 #9
0
 private static void ConvertBackupService(XDocument document, Settings settings)
 {
     settings.Services.BackupService.BackupType = (BackupType)document.ToInt32("Резервное копирование,Периодичность");
     settings.Services.BackupService.BackupStorage = document.ToString("Резервное копирование,Папка резервных копий");
     settings.Services.BackupService.RemovePreviousBackup = document.ToBoolean("Резервное копирование,Удалять старые копии");
     settings.Services.BackupService.BackupStartTime = DateTime.ParseExact(
         document.ToString("Резервное копирование,Начало копирования"),
         "HH.mm",
         null);
     settings.Services.BackupService.DayOfWeek = document.ToInt32("Резервное копирование,День недели");
     settings.Services.BackupService.DayOfMonth = document.ToInt32("Резервное копирование,День месяца");
 }
예제 #10
0
        private static void ConvertCommon(XDocument document, Settings settings)
        {
            #region Разное

            settings.Common.CashNo = document.ToInt32("Общие,Номер кассы");

            var match = Regex.Match(document.ToString("Общие,Шаблон ШК весового товара"), _barcodeTemplate);
            if (match.Success)
            {
                settings.Common.ScaleBarcodePrefixes =
                    new String[] { match.Groups["Prefix"].Value };

                settings.Common.ScaleBarcodeFormat.Clear();
                settings.Common.ScaleBarcodeFormat.Add(new ScaleBarcodeGroup
                    {
                        GroupType = ScaleBarcodeGroupType.Prefix,
                        GroupLength = match.Groups["Prefix"].Value.Length
                    });
                settings.Common.ScaleBarcodeFormat.Add(new ScaleBarcodeGroup
                    {
                        GroupType = ScaleBarcodeGroupType.Code,
                        GroupLength = match.Groups["Article"].Value.Length
                    });
                settings.Common.ScaleBarcodeFormat.Add(new ScaleBarcodeGroup
                {
                    GroupType = ScaleBarcodeGroupType.Quantity,
                    GroupLength = match.Groups["Weight"].Value.Length
                });
                settings.Common.ScaleBarcodeFormat.Add(new ScaleBarcodeGroup
                {
                    GroupType = ScaleBarcodeGroupType.AnyValue,
                    GroupLength = match.Groups["Control"].Value.Length
                });

            }

            settings.Common.HideBarcodePrefixes = document.ToArray("Общие,Префиксы служебных штрихкодов");
            settings.Common.PointId = document.ToString("Общие,Точка продажи");
            settings.Common.FreeSaleVATRate = document.ToInt32("Общие,Ставка НДС свободной продажи");
            settings.Common.InvoiceBarPrefix = document.ToString("Общие,Префикс ШК документов");
            settings.Common.ExpiryControl = (ExpiryControlType)document.ToInt32("Общие,Контроль срока годности");
            settings.Common.ChargeOwner = document.ToString("Общие,Фирма-владелец для оплаты услуг");

            #endregion

            #region Сенсорный экран

            settings.View.ScreenKeyboard = document.ToBoolean("Общие,Экранная клавиатура");
            settings.View.NavigationPanel = document.ToBoolean("Общие,Навигация по справочнику товаров");
            settings.View.NavPanelHeight = document.ToInt32("Общие,Высота навигационной панели");
            settings.View.NavItemHeight = document.ToInt32("Общие,Высота элемента");
            settings.View.NavItemWidth = document.ToInt32("Общие,Ширина элемента");
            settings.View.NavItemFontSize = document.ToInt32("Общие,Размер шрифта элемента");

            #endregion

            #region Сообщения

            settings.Common.ErrorMessageBoxAutocloseInterval = document.ToInt32("Общие,Автозакрытие сообщений об ошибке");
            settings.Common.MessageBoxAutocloseInterval = document.ToInt32("Общие,Автозакрытие прочих сообщений");

            #endregion

            #region Флаги

            settings.Common.MinimizeQuantity = document.ToBoolean("Общие,Разрешить уменьшать количество");
            settings.Common.WaitForDrawerClose = document.ToBoolean("Общие,Ждать закрытия ДЯ");
            settings.View.FirstOnTop = document.ToBoolean("Общие,Первый товар вверху");
            settings.Common.ZeroPrice = document.ToBoolean("Общие,Разрешить нулевую цену");
            settings.Common.ExtractVAT = document.ToBoolean("Общие,Выделять НДС");
            settings.Common.CurrentShiftReturnOnly = document.ToBoolean("Общие,Возврат только за текущую смену");
            settings.Common.StrictCashierRegistration = document.ToBoolean("Общие,Строгий учет кассиров");
            settings.View.InfoPanel = document.ToBoolean("Общие,Информационная панель");
            settings.Common.BlockZReportIfDocOpened = document.ToBoolean("Общие,Блокировка Z-отчета при открытом чеке");
            settings.Common.AllowShutdownFromShell = document.ToBoolean("Общие,Завершать работу из загрузчика");
            settings.Common.UseReserveControlTape = document.ToBoolean("Общие,Резервная контрольная лента");

            #endregion
        }
예제 #11
0
 private static void ConvertDiscounts(XDocument document, Settings settings)
 {
     settings.Discounts.AutoDiscounts = document.ToBoolean("Скидки,Автоматические скидки");
     settings.Discounts.PersonalDiscounts = document.ToBoolean("Скидки,Персональные скидки");
     settings.Discounts.MixDiscounts = document.ToBoolean("Скидки,Смешивать скидки");
     settings.Discounts.RoundType = (ReceiptRoundType)document.ToInt32("Скидки,Округление суммы чека");
     settings.Discounts.RoundDigit = document.ToInt32("Скидки,Разряд округления");
     settings.Discounts.AutoExtraCharge = document.ToBoolean("Скидки,Авт. наценка чека");
     settings.Discounts.UsePayService = document.ToBoolean("Скидки,Использовать ПДС");
 }
예제 #12
0
        private static void ConvertStatistics(XDocument document, Settings settings)
        {
            settings.Statistics.EnableEventlog = document.ToBoolean("Статистика,Журнал кассовых операций");
            settings.Statistics.StatParams.Clear();

            var protocolParams = document.ToArray("Статистика,Параметры");
            foreach (var protocolName in document.ToArray("Статистика,Протоколы"))
            {
                var protocol = new LoggerProtocol { Name = protocolName };

                foreach (var protocolParam in protocolParams
                    .Where(s => s.StartsWith(protocolName))
                    .Select(s =>
                    {
                        var paramParts = s.PureSplit('?');
                        return paramParts.Length == 2 ? paramParts[1] : String.Empty;
                    }))
                {
                    var paramNameAndValue = protocolParam.PureSplit('=');
                    if (paramNameAndValue.Length == 2)
                    {
                        protocol.Params.Add(new ProtocolParameter
                            {
                                Name = paramNameAndValue[0],
                                Value = paramNameAndValue[1]
                            });
                    }
                }
                
                settings.Statistics.StatParams.Add(protocol);
            }
        }
예제 #13
0
 /// <summary>
 /// Создает экземпляр класса
 /// </summary>
 /// <param name="terminalSettings">Параметры терминала</param>
 protected CustomEventDataConverter(Settings terminalSettings)
 {
     TerminalSettings = terminalSettings;
 }
예제 #14
0
 private static void ConvertManagementService(XDocument document, Settings settings)
 {
     settings.Services.ManagementService.Port = document.ToInt32("Служба управления POS,Порт");
     settings.Services.ManagementService.User = document.ToString("Служба управления POS,Пользователь");
     settings.Services.ManagementService.Password = document.ToString("Служба управления POS,Пароль");
     settings.Services.ManagementService.Domain = document.ToString("Служба управления POS,Домен");
     settings.Services.ManagementService.EventlogExpiry = document.ToInt32("Служба управления POS,Срок хранения журналов");
 }
예제 #15
0
 private static void ConvertExchangeService(XDocument document, Settings settings)
 {
     settings.Services.ExchangeService.Port = document.ToInt32("Служба обмена данными,Порт");
     settings.Services.ExchangeService.IgnoreUsers = document.ToBoolean("Служба обмена данными,Встроенный редактор прав пользователей");
 }
예제 #16
0
        private static void ConvertScales(XDocument document, Settings settings)
        {
            settings.Hardware.Scales.Clear();

            var protocol = document.ToString("Внешние модули,Весы");
            if (!String.IsNullOrEmpty(protocol))
            {
                settings.Hardware.Scales.Add(new Scales
                    {
                        Port = document.ToInt32("Весы,Номер порта"),
                        Baud = document.ToInt32("Весы,Скорость"),
                        Id = "ВесыПоУмолчанию",
                        IsDefault = true,
                        ProtocolType = protocol
                    });
            }
        }
예제 #17
0
 private static void ConvertCustomerDisplay(XDocument document, Settings settings)
 {
     settings.Hardware.Displays.Clear();
     
     var protocol = document.ToString("Внешние модули,Дисплей покупателя");
     if (!String.IsNullOrEmpty(protocol))
     {
         var display = new CustomerDisplay
             {
                 ProtocolType = protocol,
                 Baud = document.ToInt32("Дисплей покупателя,Скорость")
             };
         display.Port = document.ToBoolean("Дисплей покупателя,Не использует COM-порт") ?
             -1 : document.ToInt32("Дисплей покупателя,Номер порта");
         settings.Hardware.Displays.Add(display);
     }
 }
예제 #18
0
        private static void ConvertBarcodeScanner(XDocument document, Settings settings)
        {
            settings.Common.ExpandBarcodesToEAN13 = document.ToBoolean("Сканер штрих-кода,Дополнять ШК до EAN-13");
            
            settings.Hardware.Scanners.Clear();

            if (!document.ToBoolean("Сканер штрих-кода,Отключен"))
            {
                settings.Hardware.Scanners.Add(new BarcodeScanner
                    {
                        Port = document.ToInt32("Сканер штрих-кода,Номер порта"),
                        Baud = document.ToInt32("Сканер штрих-кода,Скорость"),
                        Suffix = document.ToInt32("Сканер штрих-кода,Стоп-символ"),
                        Parity = (Parity)document.ToInt32("Сканер штрих-кода,Четность")
                    });
            }
        }
 /// <summary>
 /// Создает экземпляр класса
 /// </summary>
 /// <param name="terminalSettings">Параметры терминала</param>
 /// <param name="maskPasswords">Маскировать пароли</param>
 public POSIntellectEventDataConvertert(Settings terminalSettings, Boolean maskPasswords)
     : base(terminalSettings)
 {
     _maskPaswords = maskPasswords;
 }
예제 #20
0
 private static void ConvertPayService(XDocument document, Settings settings)
 {
     settings.PayService.Server = document.ToString("Безналичный расчет,Сервер");
     settings.PayService.Port = document.ToInt32("Безналичный расчет,Порт");
     settings.PayService.AcceptCards = document.ToBoolean("Безналичный расчет,Разрешить безнал");
 }
예제 #21
0
 private static void ConvertPrint(XDocument document, Settings settings)
 {
     settings.Print.Flags = document.ToArray("Печать,Параметры печати");
     settings.Print.AutoPrintFlags = document.ToArray("Печать,Печать документов при закрытии чека");
     settings.Print.ReceiptPrefix = document.ToString("Печать,Префикс ШК чеков");
     settings.Print.Separator = document.ToString("Печать,Разделитель")[0];
     settings.Print.RegisterBySections = document.ToBoolean("Печать,Регистрация по секциям");
     settings.Print.ByNotes = document.ToBoolean("Печать,Печать покупюрной описи");
     settings.Print.ChargeSlip = document.ToBoolean("Печать,Печать слипа при оплате услуг");
     settings.Print.ClicheFromDatabase = document.ToBoolean("Печать,Клише по данным справочника");
     settings.Print.AutoPrintSystemBalance = document.ToBoolean("Печать,Печатать системный баланс");
     settings.Print.ShortSystemBalance = document.ToBoolean("Печать,Сокращенный системный баланс");
     settings.Print.PrintBalanceInPoints = document.ToBoolean("Печать,Печатать баланс карты в баллах");
     settings.Print.PrintSummary = document.ToBoolean("Печать,Печатать итоговый чек");
     settings.Print.IgnoreEcrCashCounter = document.ToBoolean("Печать,Игнорировать счетчик наличности ФР");
 }
예제 #22
0
 private static void ConvertCashRegister(XDocument document, Settings settings,
     String protocol, String groupName)
 {
     settings.Hardware.CashRegisters.Add(new CashRegister
     {
         ProtocolType = protocol,
         InvertDrawerStatus = document.ToBoolean("Общие,Инвертировать состояние ДЯ"),
         ErrorsIgnoreList = document.ToArray("Печать,Игнорировать ошибки ФР"),
         ClicheAfterNonFiscal = document.ToBoolean("Печать,Печатать клише после нефиск. док."),
         OwnerId = document.ToString(String.Format("{0},Юр. лицо", groupName)),
         Port = document.ToInt32(String.Format("{0},Номер порта", groupName)),
         Baud = document.ToInt32(String.Format("{0},Скорость", groupName)),
         IsDefault = document.ToBoolean(String.Format("{0},По умолчанию", groupName)),
         Header = document.ToArray(String.Format("{0},Клише чека", groupName)),
         Footer = document.ToArray(String.Format("{0},Подвал чека", groupName))
     });
 }
예제 #23
0
        private static void ConvertCashRegisters(XDocument document, Settings settings)
        {
            settings.Hardware.CashRegisters.Clear();

            var protocol = document.ToString("Внешние модули,Фискальный регистратор");
            if (!String.IsNullOrEmpty(protocol))
            {
                for (var i = 1; i <= 2; i++)
                {
                    var groupName = String.Format("Фискальный регистратор {0}", i);
                    if (document.GroupExists(groupName))
                    {
                        ConvertCashRegister(document, settings, protocol, groupName);
                    }
                }
            }
        }
예제 #24
0
 private static void ConvertOperations(XDocument document, Settings settings)
 {
     settings.Operations.CancelReceipt = (CashSecurityPermission)document.ToInt32("Операции,Аннулировать чек");
     settings.Operations.ChangeQuantity = (CashSecurityPermission)document.ToInt32("Операции,Ввод количества");
     settings.Operations.DeletePosition = (CashSecurityPermission)document.ToInt32("Операции,Ошибка в чеке");
     settings.Operations.OpenDrawer = (CashSecurityPermission)document.ToInt32("Операции,Открытие ДЯ");
     settings.Operations.ReceiptReturn = (CashSecurityPermission)document.ToInt32("Операции,Возврат");
     settings.Operations.ReceiptSuspend = (CashSecurityPermission)document.ToInt32("Операции,Отложить чек");
     settings.Operations.ReceiptResume = (CashSecurityPermission)document.ToInt32("Операции,Продолжить отложенный чек");
     settings.Operations.FindByName = (CashSecurityPermission)document.ToInt32("Операции,Поиск по наименованию");
     settings.Operations.FreeSale = (CashSecurityPermission)document.ToInt32("Операции,Свободная продажа");
     settings.Operations.FindByArticle = (CashSecurityPermission)document.ToInt32("Операции,Поиск по артикулу");
 }
예제 #25
0
        /// <summary>
        /// Создает экземпляр конфигурации системы и инициализирует его значениями по умолчанию
        /// </summary>
        /// <returns>Экземпляр конфигурации системы</returns>
        public static Settings CreateInstance()
        {
            var settings = new Settings();

            // инициализация конфигурации значениями по умолчанию
            // весовой шрихкод
            settings.Common.ScaleBarcodeFormat.Add(new ScaleBarcodeGroup
            {
                GroupType = ScaleBarcodeGroupType.Prefix,
                GroupLength = 2
            });
            settings.Common.ScaleBarcodeFormat.Add(new ScaleBarcodeGroup
            {
                GroupType = ScaleBarcodeGroupType.Code,
                GroupLength = 5
            });
            settings.Common.ScaleBarcodeFormat.Add(new ScaleBarcodeGroup
            {
                GroupType = ScaleBarcodeGroupType.Quantity,
                GroupLength = 5
            });
            settings.Common.ScaleBarcodeFormat.Add(new ScaleBarcodeGroup
            {
                GroupType = ScaleBarcodeGroupType.AnyValue,
                GroupLength = 1
            });

            // внешние приложения
            settings.Applications.Items.Add(new ExternalApplication
            {
                Commentary = "Командная строка",
                ExecutableName = "cmd.exe"
            });
            settings.Applications.Items.Add(new ExternalApplication
            {
                Commentary = "Диспетчер задач",
                ExecutableName = "taskmgr.exe"
            });
            settings.Applications.Items.Add(new ExternalApplication
            {
                Commentary = "Проводник",
                ExecutableName = "explorer.exe"
            });

            return settings;
        }
예제 #26
0
 private static void ConvertDatabase(XDocument document, Settings settings)
 {
     settings.Database.Service = document.ToString("База данных,Имя службы сервера БД");
     settings.Database.DatabaseFile = document.ToString("База данных,Имя файла");
     settings.Database.User = document.ToString("База данных,Пользователь");
     settings.Database.Password = document.ToString("База данных,Пароль");
 }