public void FilterGetAllDocumentsIfNoOnlyNoParsedTest()
        {
            // Создаем поставщика
            var supplier = DataMother.CreateSupplier();

            Save(supplier);
            var client = DataMother.CreateTestClientWithAddress();

            Save(client);
            // Создаем много документов, чтобы не влезали на одну страницу
            for (int i = 0; i < 33; i++)
            {
                var documentLog = new DocumentReceiveLog(supplier);
                documentLog.ForClient = client;
                Save(documentLog);
            }
            // Создаем фильтр и устанавливаем параметр Только неразобранные
            var filter = new DocumentFilter();

            filter.Supplier     = supplier;
            filter.OnlyNoParsed = true;

            var documents = filter.Find(session);

            // должны получить документы в количестве равном одной странице
            Assert.That(documents.Count, Is.EqualTo(filter.PageSize));

            // ищем все документы
            filter.OnlyNoParsed = false;
            documents           = filter.Find(session);
            // должны получить документы в количестве большем одной страницы
            Assert.That(documents.Count, Is.GreaterThan(filter.PageSize));
        }
        public void OnlyNoParsedWithSendLogsTest()
        {
            // создаем фильтр, устанавливаем в качестве параметра созданного поставщика и "искать только неразобранные"
            var filter = new DocumentFilter();

            filter.Supplier     = _supplier;
            filter.OnlyNoParsed = true;
            var documents = filter.Find(session);

            // Добавляем логи отправки
            _documentLog.SendLogs = new List <DocumentSendLog>();
            _documentLog.SendLogs.Add(new DocumentSendLog(_client.Users[0], _documentLog));
            _documentLog.SendLogs.Add(new DocumentSendLog(_client.Users[1], _documentLog));
            Save(_documentLog.SendLogs);
            Save(_documentLog);
            // проверяем, что два сохраненных лога не дают дублирование документа
            var documentsWithSendLogs = filter.Find(session);

            Assert.That(documents.Count, Is.GreaterThan(0));
            Assert.That(documents.Count, Is.EqualTo(documentsWithSendLogs.Count));
        }
        public void OnlyNoParcedWithFakeTest()
        {
            _documentLog.IsFake = true;
            Save(_documentLog);
            Flush();
            // создаем фильтр, устанавливаем в качестве параметра созданного поставщика и "искать только неразобранные"
            var filter = new DocumentFilter();

            filter.Supplier     = _supplier;
            filter.OnlyNoParsed = true;
            // ищем
            var documents = filter.Find(session);

            // не должны получить сохраненный выше документ из-за установленного IsFake
            Assert.That(documents.Count, Is.EqualTo(0));
        }
        public void OnlyNoParcedWithDocumentTest()
        {
            // создаем фильтр, устанавливаем в качестве параметра созданного поставщика и "искать только неразобранные"
            var filter = new DocumentFilter();

            filter.Supplier     = _supplier;
            filter.OnlyNoParsed = true;
            // создаем документ для лога
            var document = DataMother.CreateTestDocument(_supplier, _client, _documentLog);

            Save(document);
            // не должны выбрать запись лога, так как уже есть документ
            var documents = filter.Find(session);

            Assert.That(documents.Count, Is.EqualTo(0));
        }
        public void Get_document_error_for_supplier()
        {
            var supplier = DataMother.CreateSupplier();

            Save(supplier);
            var document = new DocumentReceiveLog(supplier);

            Save(document);
            Flush();

            var filter = new DocumentFilter();

            filter.Supplier = supplier;
            var documents = filter.Find(session);

            Assert.That(documents.Count, Is.GreaterThan(0));
            Assert.That(documents.Any(d => d.Id == document.Id), Is.True,
                        "должен быть {0} но есть {1}", document.Id, documents.Implode(d => d.Id));
        }
예제 #6
0
        public void Documents([ARDataBind("filter", AutoLoadBehavior.NullIfInvalidKey)] DocumentFilter filter)
        {
            if (filter.Client != null)
            {
                var clientUsers = DbSession.Load <Client>(filter.Client.Id).Users;
                if (clientUsers != null)
                {
                    filter.StatMode = clientUsers.Count > 1;
                }
            }
            var sqlFormat = @"
    SELECT
        document_logs.RowId as Id,
        document_logs.LogTime as LogTime,
        document_logs.DocumentType as DocumentType,
        document_logs.FileName as FileName,
        document_logs.Addition as Addition,
        document_logs.DocumentSize as DocumentSize,
        analitFUpdates.UpdateId as SendUpdateId,          
        documentHeaders.ProviderDocumentId as ProviderDocumentId,
        documentHeaders.DocumentDate as DocumentDate, 
        
       IFNULL(documentHeaders.Id,IFNULL(reject.Id,NULL)) as DocumentId,
       IFNULL(documentHeaders.WriteTime,IFNULL(reject.WriteTime,NULL))   as DocumentWriteTime,
       IFNULL(documentHeaders.Parser,IFNULL(reject.Parser,NULL))   as Parser,
        
        services.Name as Supplier,
        suppliers.Id as SupplierId,
        servClients.Name as Client,
        clients.Id as ClientId,
        addresses.Address as Address,
        addresses.Enabled as AddressEnabled,
        services.HomeRegion as RegionName
{0}

    FROM
        Logs.Document_logs document_logs 
    inner join
        Customers.Suppliers suppliers 
            on document_logs.FirmCode=suppliers.Id 
    left outer join
        Customers.Services services 
            on suppliers.Id=services.Id 
    left outer join
        Customers.Clients clients 
            on document_logs.ClientCode=clients.Id 
    left outer join
        Customers.Services servClients 
            on clients.Id=servClients.Id 
    left outer join
        Customers.Addresses addresses 
            on document_logs.AddressId=addresses.Id 
    left outer join
        logs.AnalitFUpdates analitFUpdates 
            on document_logs.SendUpdateId=analitFUpdates.UpdateId 
{1}
    left outer join
        documents.DocumentHeaders documentHeaders 
            on document_logs.RowId=documentHeaders.DownloadId 
    left outer join
        documents.rejectheaders reject 
            on document_logs.RowId=reject.DownloadId  
    WHERE
        document_logs.LogTime >= @LogTimeBegin 
        and document_logs.LogTime <= @LogTimeEnd 
{2}
    ORDER BY
        LogTime desc; 
";


            PropertyBag["filter"] = filter;

            var statModeFrom   = "";
            var statModeSelect = "";

            if (!filter.StatMode)
            {
                statModeSelect = @",
        users.Login as Login,
        users.Id as LoginId,
        logsAnalitFUpdates.RequestTime as RequestTime,
        documentSendLogs.Id DeliveredId,
        documentSendLogs.FileDelivered as FileDelivered,
        documentSendLogs.DocumentDelivered as DocumentDelivered,
        documentSendLogs.SendDate as SendDate 
";

                statModeFrom = @"
    left outer join
        Logs.DocumentSendLogs documentSendLogs 
            on document_logs.RowId=documentSendLogs.DocumentId 
    left outer join
        Customers.Users users 
            on documentSendLogs.UserId=users.Id 
    left outer join
        logs.AnalitFUpdates logsAnalitFUpdates 
            on documentSendLogs.UpdateId=logsAnalitFUpdates.UpdateId 
";
            }

            // если выставлен флаг "только не разобранные накладные" (OnlyNoParsed, для соответствующей страницы), используем фильтр, иначе sql прямой запрос
            if (filter.OnlyNoParsed)
            {
                PropertyBag["logEntities"] = filter.Find(DbSession);
            }
            else
            {
                var documentLogList = new List <DocumentLog>();
                if (filter.Supplier != null)
                {
                    documentLogList =
                        DbSession.Connection.Query <DocumentLog>(
                            string.Format(sqlFormat, statModeSelect, statModeFrom, "and document_logs.FirmCode = @SupplierId "),
                            new {
                        @LogTimeBegin = filter.Period.Begin,
                        @LogTimeEnd   = filter.Period.End.AddDays(1).AddSeconds(-1),
                        @SupplierId   = filter.Supplier.Id
                    }).ToList();
                }
                if (filter.Client != null)
                {
                    documentLogList =
                        DbSession.Connection.Query <DocumentLog>(
                            string.Format(sqlFormat, statModeSelect, statModeFrom, "and document_logs.ClientCode = @ClientId "),
                            new {
                        @LogTimeBegin = filter.Period.Begin,
                        @LogTimeEnd   = filter.Period.End.AddDays(1).AddSeconds(-1),
                        @ClientId     = filter.Client.Id
                    }).ToList();
                }
                if (filter.User != null)
                {
                    documentLogList =
                        DbSession.Connection.Query <DocumentLog>(
                            string.Format(sqlFormat, statModeSelect, statModeFrom, "and documentSendLogs.UserId = @UserId "),
                            new {
                        @LogTimeBegin = filter.Period.Begin,
                        @LogTimeEnd   = filter.Period.End.AddDays(1).AddSeconds(-1),
                        @UserId       = filter.User.Id
                    }).ToList();
                }
                PropertyBag["logEntities"] = documentLogList;
            }
        }
예제 #7
0
        public static byte[] DocumentsLog(ISession session, DocumentFilter filter)
        {
            var book        = new HSSFWorkbook();
            var sheet       = book.CreateSheet("Неразобранные накладные");
            var row         = 0;
            var headerStyle = NPOIExcelHelper.GetHeaderStype(book);
            var dataStyle   = NPOIExcelHelper.GetDataStyle(book);
            var sheetRow    = sheet.CreateRow(row++);

            NPOIExcelHelper.FillNewCell(sheetRow, 0, "Неразобранные накладные", headerStyle);
            sheetRow = sheet.CreateRow(row++);
            NPOIExcelHelper.FillNewCell(sheetRow, 0, String.Format("Период: с {0} по {1}",
                                                                   filter.Period.Begin.ToString("dd.MM.yyyy"),
                                                                   filter.Period.End.ToString("dd.MM.yyyy")),
                                        book.CreateCellStyle());
            sheetRow = sheet.CreateRow(row++);
            NPOIExcelHelper.FillNewCell(sheetRow, 0, String.Format("Дата подготовки отчета: {0}", DateTime.Now), book.CreateCellStyle());
            sheetRow = sheet.CreateRow(row++);
            NPOIExcelHelper.FillNewCell(sheetRow, 0, String.Format("Регион: {0}", filter.Region == null ? "Все" : filter.Region.Name), book.CreateCellStyle());
            sheet.CreateRow(row++);
            var tableHeaderRow = row;

            sheetRow = sheet.CreateRow(row++);
            NPOIExcelHelper.FillNewCell(sheetRow, 0, "Номер документа", headerStyle);
            NPOIExcelHelper.FillNewCell(sheetRow, 1, "Дата получения", headerStyle);
            NPOIExcelHelper.FillNewCell(sheetRow, 2, "Тип документа", headerStyle);
            NPOIExcelHelper.FillNewCell(sheetRow, 3, "От поставщика", headerStyle);
            NPOIExcelHelper.FillNewCell(sheetRow, 4, "Клиенту", headerStyle);
            NPOIExcelHelper.FillNewCell(sheetRow, 5, "На адрес", headerStyle);
            NPOIExcelHelper.FillNewCell(sheetRow, 6, "Название файла", headerStyle);
            NPOIExcelHelper.FillNewCell(sheetRow, 7, "Размер", headerStyle);
            NPOIExcelHelper.FillNewCell(sheetRow, 8, "Парсер", headerStyle);
            NPOIExcelHelper.FillNewCell(sheetRow, 9, "Комментарий", headerStyle);

            var items = filter.Find(session, true);

            foreach (var item in items)
            {
                sheetRow = sheet.CreateRow(row++);
                NPOIExcelHelper.FillNewCell(sheetRow, 0, item.Id.ToString(), dataStyle);
                NPOIExcelHelper.FillNewCell(sheetRow, 1, item.LogTime.ToString(), dataStyle);
                NPOIExcelHelper.FillNewCell(sheetRow, 2, BindingHelper.GetDescription(item.DocumentType), dataStyle);
                NPOIExcelHelper.FillNewCell(sheetRow, 3, item.Supplier, dataStyle);
                NPOIExcelHelper.FillNewCell(sheetRow, 4, item.Client, dataStyle);
                NPOIExcelHelper.FillNewCell(sheetRow, 5, item.Address, dataStyle);
                NPOIExcelHelper.FillNewCell(sheetRow, 6, item.FileName, dataStyle);
                NPOIExcelHelper.FillNewCell(sheetRow, 7,
                                            item.DocumentSize == null ? ""
                                                : ViewHelper.ConvertToUserFriendlySize(item.DocumentSize.Value),
                                            dataStyle);
                NPOIExcelHelper.FillNewCell(sheetRow, 8, item.Parser, dataStyle);
                NPOIExcelHelper.FillNewCell(sheetRow, 9, item.Addition, dataStyle);
            }

            // добавляем автофильтр
            sheet.SetAutoFilter(new CellRangeAddress(tableHeaderRow, row, 0, 9));

            sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, 9));

            // устанавливаем ширину столбцов
            for (int i = 0; i < 10; i++)
            {
                sheet.SetColumnWidth(i, sheet.GetColumnWidth(i) * 2);
            }

            sheet.SetColumnWidth(5, sheet.GetColumnWidth(5) * 2);

            var buffer = new MemoryStream();

            book.Write(buffer);
            return(buffer.ToArray());
        }