示例#1
0
        public static string JalousiePrint(int OrderId)
        {
            try
            {
                if (!Directory.Exists(TemplatePath))
                {
                    MessageBox.Show(
                        String.Format("Каталог с шаблонами не найден.\n Проверьте путь: {0}", TemplatePath),
                        "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return null;
                }
            }
            catch
            {
                MessageBox.Show(
                    String.Format("Каталог с шаблонами не найден.\n Проверьте путь: {0}", TemplatePath),
                    "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return null;
            }

            try
            {
                if (!Directory.Exists(OutputPath))
                {
                    MessageBox.Show(
                        String.Format("Каталог для вывода не найден.\n Проверьте путь: {0}", OutputPath),
                        "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return null;
                }
            }
            catch
            {
                MessageBox.Show(
                    String.Format("Каталог для вывода не найден.\n Проверьте путь: {0}",
                                  OutputPath),
                    "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return null;
            }

            int  BlankId;

            using (var dc = new JalousieLinqDataContext(Database))
            {
                if (dc.Отчеты_жалюзи_заголовок(OrderId).Count() != 1)
                    return null;
                BlankId = dc.Отчеты_жалюзи_заголовок(OrderId)
                    .Select(x => x.Код_бланка).ToList()[0];
            }

            return JalousiePrint(OrderId, TemplateFile(BlankId), OutputFile(OrderId));
        }
示例#2
0
        public static void Fill(int OrderId, string FileName)
        {
            GC.Collect();

            //OOUtils.InitOO3Env();

            var localContext = uno.util.Bootstrap.bootstrap();
            var multiServiceFactory =
                (XMultiServiceFactory)localContext.getServiceManager();
            var xDesktop = (XDesktop)
                multiServiceFactory.createInstance("com.sun.star.frame.Desktop");

            try
            {
                #region xDesktop

                var componentLoader = (XComponentLoader)xDesktop;
                var xComponent = OOUtils.OpenFile(componentLoader, FileName, true, false);
                try
                {
                    #region xComponent

                    var xSpreadsheets = (xComponent as XSpreadsheetDocument).getSheets();
                    var xSpreadsheet = xSpreadsheets.getByName("Бланк").Value as XSpreadsheet;

                    using (var dc = new JalousieLinqDataContext(Database))
                    {
                        #region DataContext

                        var OrderTitle = dc.Отчеты_жалюзи_заголовок(OrderId).ToList()[0];
                        var Blank = dc.Жалюзи_бланкиs
                            .Where(x => x.Код == OrderTitle.Код_бланка)
                            .ToList()[0];
                        var BlankStructure = dc.Жалюзи_бланки_структураs
                            .Where(x => x.Код_бланка == OrderTitle.Код_бланка)
                            .ToList();
                        var OutputFormat = dc.Жалюзи_бланки_выводs
                            .ToList();

                        #region Title
                        xSpreadsheet.getCellRangeByName(Blank.Номер_заказа).
                            getCellByPosition(0, 0).setValue(OrderId);
                        xSpreadsheet.getCellRangeByName(Blank.Дата).
                            getCellByPosition(0, 0).setFormula(OrderTitle.Дата.ToString("yyyy-MM-d"));
                        xSpreadsheet.getCellRangeByName(Blank.Клиент).
                            getCellByPosition(0, 0).setFormula(OrderTitle.ФИО);
                        xSpreadsheet.getCellRangeByName(Blank.Телефон).
                            getCellByPosition(0, 0).setFormula(OrderTitle.Телефон);
                        if (OrderTitle.Установщик != null)
                        {
                            xSpreadsheet.getCellRangeByName(Blank.Установщик).
                                getCellByPosition(0, 0).setFormula(OrderTitle.Установщик);
                        }
                        xSpreadsheet.getCellRangeByName(Blank.Сумма).
                            getCellByPosition(0, 0).setValue((double)OrderTitle.Сумма);
                        xSpreadsheet.getCellRangeByName(Blank.Предоплата).
                            getCellByPosition(0, 0).setValue((double)OrderTitle.Предоплата);
                        if (OrderTitle.Дата_готовности != null)
                        {
                            var date = (System.DateTime) OrderTitle.Дата_готовности;
                            xSpreadsheet.getCellRangeByName(Blank.Срок_исполнения).
                                getCellByPosition(0, 0).setFormula(date.ToString("yyyy-MM-d"));
                        }
                        xSpreadsheet.getCellRangeByName(Blank.Название_магазина).
                            getCellByPosition(0, 0).setFormula(OrderTitle.Магазин_название);
                        xSpreadsheet.getCellRangeByName(Blank.Телефон_магазина).
                            getCellByPosition(0, 0).setFormula(OrderTitle.Магазин_телефон);
                        xSpreadsheet.getCellRangeByName(Blank.Дополнительно).
                            getCellByPosition(0, 0).setFormula(OrderTitle.Дополнительно);
                        xSpreadsheet.getCellRangeByName(Blank.Реквизиты).
                            getCellByPosition(0, 0).setFormula(OrderTitle.Реквизиты);

                        if (OrderTitle.Статус == -1)
                            xSpreadsheet.getCellRangeByName(Blank.Предварительный_бланк).
                                getCellByPosition(0, 0).setFormula("Предварительный бланк");
                        #endregion

                        var OrderPositions = dc.Жалюзи_заказы_позицииs
                            .Where(x => x.Код_заказа == OrderId)
                            .ToList();

                        for (var i = 0; i < OrderPositions.Count; i++)
                        {
                            #region Positions
                            var OrderPosition = OrderPositions[i];
                            var CellIndex = (i + OrderTitle.Первая_позиция).ToString();

                            xSpreadsheet.getCellRangeByName(OrderTitle.Цена_столбец + CellIndex).
                                getCellByPosition(0, 0).setValue
                                (OrderPosition.Цена * (1 - OrderPosition.Скидка / 100));
                            xSpreadsheet.getCellRangeByName(OrderTitle.Количество_столбец + CellIndex).
                                getCellByPosition(0, 0).setValue((double)OrderPosition.Количество);

                            if (OrderTitle.Скидка_столбец.IndexOf("Z") == -1)
                                xSpreadsheet.getCellRangeByName(OrderTitle.Скидка_столбец + CellIndex).
                                    getCellByPosition(0, 0).setValue(OrderPosition.Скидка / 100);

                            var OrderPrositionStructures = dc.Жалюзи_заказы_позиции_структураs
                                .Where(x => x.Код_позиции == OrderPosition.Код).ToList();

                            #region Structure
                            foreach (var xBlankStructure in BlankStructure)
                            {
                                if (String.IsNullOrEmpty(xBlankStructure.Ячейка.Trim()) ||
                                    xBlankStructure.Ячейка.IndexOf("Z") >= 0)
                                    continue;
                                var Value = "";

                                #region Fill Value

                                var TargetOrderPrositionStructures = OrderPrositionStructures
                                    .Where(x => x.Код_структуры == xBlankStructure.Код).ToList();

                                if (TargetOrderPrositionStructures.Count>0)
                                {
                                    var TargetOrderPrositionStructure = TargetOrderPrositionStructures[0];
                                    switch (xBlankStructure.Код_типа_данных)
                                    {
                                        case 1:
                                            Value = TargetOrderPrositionStructure.Целое.ToString(xBlankStructure.Формат);
                                            break;
                                        case 2:
                                            Value = TargetOrderPrositionStructure.Дробное.ToString(xBlankStructure.Формат);
                                            break;
                                        case 3:
                                            Value = TargetOrderPrositionStructure.Текстовое;
                                            break;
                                        case 4:
                                            var xDictionary = dc.Жалюзи_все_справочникиs
                                                .Where(x => x.Код == xBlankStructure.Код_справочника)
                                                .ToList()[0];
                                            var xContent = dc.Жалюзи_все_справочники_содержаниеs
                                                .Where(x =>
                                                       x.Код_справочника == xBlankStructure.Код_справочника &&
                                                       x.Код == TargetOrderPrositionStructure.Справочник)
                                                .ToList()[0];

                                            switch (xDictionary.Код_типа_данных)
                                            {
                                                case 1:
                                                    Value = xContent.Целое.ToString(xBlankStructure.Формат);
                                                    break;
                                                case 2:
                                                    Value = xContent.Дробное.ToString(xBlankStructure.Формат);
                                                    break;
                                                case 3:
                                                    Value = xContent.Текстовое;
                                                    break;
                                            }
                                            break;
                                    }

                                }
                                else
                                    switch (xBlankStructure.Код_типа_данных)
                                    {
                                        case 1:
                                            Value = xBlankStructure.Целое.ToString(xBlankStructure.Формат);
                                            break;
                                        case 2:
                                            Value = xBlankStructure.Дробное.ToString(xBlankStructure.Формат);
                                            break;
                                        case 3:
                                            Value = xBlankStructure.Текстовое;
                                            break;
                                        case 4:
                                            var xDictionary = dc.Жалюзи_все_справочникиs
                                                .Where(x => x.Код == xBlankStructure.Код_справочника)
                                                .ToList()[0];
                                            var xContent = dc.Жалюзи_все_справочники_содержаниеs
                                                .Where(x => x.Код == xBlankStructure.Справочник)
                                                .ToList()[0];

                                            switch (xDictionary.Код_типа_данных)
                                            {
                                                case 1:
                                                    Value = xContent.Целое.ToString(xBlankStructure.Формат);
                                                    break;
                                                case 2:
                                                    Value = xContent.Дробное.ToString(xBlankStructure.Формат);
                                                    break;
                                                case 3:
                                                    Value = xContent.Текстовое;
                                                    break;
                                            }
                                            break;
                                    }
                                #endregion

                                var Replace = OutputFormat
                                    .Where(x =>
                                           x.Код_структуры == xBlankStructure.Код
                                           && x.Значение == Value)
                                    .ToList();
                                if (Replace.Count > 0)
                                    Value = Replace[0].Замена;

                                try
                                {
                                    xSpreadsheet.getCellRangeByName(xBlankStructure.Ячейка.Trim() + CellIndex).
                                        getCellByPosition(0, 0).setValue(Convert.ToDouble(Value));
                                }
                                catch
                                {

                                    xSpreadsheet.getCellRangeByName(xBlankStructure.Ячейка.Trim() + CellIndex).
                                        getCellByPosition(0, 0).setFormula(Value);
                                }
                            }
                            #endregion

                            #endregion
                        }
                        #endregion
                    }
                    #endregion

                }
                finally
                {
                    OOUtils.SaveFile(xComponent as XStorable);
                    OOUtils.CloseFile(xComponent as XCloseable);
                    xComponent = null;
                }
                #endregion
            }
            finally
            {

                OOUtils.CloseDesktop(xDesktop);
                xDesktop = null;
                GC.Collect();
            }
        }