/// <summary> /// Должен переопределиться для регистрации данных для отчета. /// </summary> /// <param name="token">Маркер безопасности.</param> /// <param name="report">Создаваемый отчет.</param> /// <param name="input">Значения полученные с формы ввода.</param> /// <returns>Название файла.</returns> public override string RegisterData(SecurityToken token, LocalReport report, IncomingDocItemsReportInput input) { var incomingDoc = RemontinkaServer.Instance.EntitiesFacade.GetIncomingDoc(token, input.IncomingDocID); if (incomingDoc == null) { throw new Exception("Нет такого документа"); } //if var items = RemontinkaServer.Instance.EntitiesFacade.GetIncomingDocItems(token, input.IncomingDocID).ToList(); var dataSource = new ReportDataSource("ReportDataSet", items); report.DataSources.Add(dataSource); report.SetParameters(new ReportParameter("DocDate", Utils.DateTimeToString(incomingDoc.DocDate))); report.SetParameters(new ReportParameter("WarehouseTitle", incomingDoc.WarehouseTitle)); report.SetParameters(new ReportParameter("ContractorLegalName", incomingDoc.ContractorLegalName)); report.SetParameters(new ReportParameter("DocNumber", incomingDoc.DocNumber)); report.SetParameters(new ReportParameter("DocDescription", incomingDoc.DocDescription ?? string.Empty)); report.SetParameters(new ReportParameter("TotalCount", Utils.IntToString(items.Count))); var totalSum = items.Sum(i => i.Total * i.InitPrice); report.SetParameters(new ReportParameter("TotalSum", Utils.DecimalToString(totalSum))); report.SetParameters(new ReportParameter("TotalRusSum", RusCurrency.StrRur((double)totalSum))); return(string.Format("Приходная накладная номер {0} от {1:dd.MM.yyyy}", incomingDoc.DocNumber, incomingDoc.DocDate)); }
/// <summary> /// Вызывается, когда необходимо обновление источника данных для отчета. /// </summary> /// <param name="token">Токен безопасности.</param> /// <param name="report">Отчет.</param> /// <param name="reportParameters">Параметры отчета.</param> public override void UpdateDataSource(SecurityToken token, IncomingDocItemsXtraReport report, IncomingDocItemsReportParameters reportParameters) { var incomingDoc = RemontinkaServer.Instance.EntitiesFacade.GetIncomingDoc(token, reportParameters.IncomingDocID); if (incomingDoc == null) { throw new Exception("Нет такого документа"); } //if report.Parameters["DocDate"].Value = incomingDoc.DocDate; report.Parameters["WarehouseTitle"].Value = incomingDoc.WarehouseTitle; report.Parameters["ContractorLegalName"].Value = incomingDoc.ContractorLegalName; report.Parameters["DocNumber"].Value = incomingDoc.DocNumber; report.Parameters["DocDescription"].Value = incomingDoc.DocDescription; var items = RemontinkaServer.Instance.EntitiesFacade.GetIncomingDocItems(token, reportParameters.IncomingDocID).ToList(); var totalSum = items.Sum(i => i.Total * i.InitPrice); report.Parameters["TotalRusSum"].Value = RusCurrency.StrRur((double)totalSum); report.DataSource = items; }
/// <summary> /// Создает html представление отчетов связанных с заказами. /// </summary> /// <param name="token">Токен безопасности.</param> /// <param name="customReportID">Код необходимого отчета. </param> /// <param name="repairOrder">Связанный заказ.</param> /// <returns>Сгенерированный результат.</returns> public string CreateRepairOrderReport(SecurityToken token, Guid?customReportID, RepairOrderDTO repairOrder) { _logger.InfoFormat("Начало создания отчета по объекту заказа {0} для заказа {1} пользователем {2}", customReportID, repairOrder.RepairOrderID, token.LoginName); #if CLIENT var customReport = ClientCore.Instance.DataStore.GetCustomReportItem(customReportID); #else var customReport = RemontinkaServer.Instance.EntitiesFacade.GetCustomReportItem(token, customReportID); #endif if (customReport == null || string.IsNullOrWhiteSpace(customReport.HtmlContent)) { _logger.ErrorFormat("Отчет не найден или не задан {0}", customReportID); return(NotFoundMessage); } //if var contextBuilder = new ContextStringBuilder(); #if CLIENT var branch = ClientCore.Instance.DataStore.GetBranch(repairOrder.BranchIDGuid); #else var branch = RemontinkaServer.Instance.EntitiesFacade.GetBranch(token, repairOrder.BranchID); var domain = RemontinkaServer.Instance.EntitiesFacade.GetUserDomain(token); contextBuilder.Add(new RepairOrderGlobalReferenceContextItem(repairOrder, domain)); #endif contextBuilder.Add(new TodayContextItem()); contextBuilder.Add(new RepairOrderContextItem(repairOrder)); contextBuilder.Add(new BranchContextItem(branch)); #if CLIENT #else contextBuilder.Add(new BarcodeContextItem(repairOrder)); #endif foreach ( var key in _contextTableMap.Keys.Where(i => customReport.HtmlContent.Contains(string.Format("{{{0}}}", i)))) { contextBuilder.Add(new SimpleContextItem(key, _contextTableMap[key](token, repairOrder, branch))); } //foreach #if CLIENT var deviceInfo = ClientCore.Instance.DataStore.GetDeviceItemsTotal(repairOrder.RepairOrderIDGuid); var workInfo = ClientCore.Instance.DataStore.GetWorkItemsTotal(repairOrder.RepairOrderIDGuid); #else var deviceInfo = RemontinkaServer.Instance.DataStore.GetDeviceItemsTotal(repairOrder.RepairOrderID); var workInfo = RemontinkaServer.Instance.DataStore.GetWorkItemsTotal(repairOrder.RepairOrderID); #endif var totalCount = 0.0M; var totalPrice = 0.0M; if (deviceInfo != null) { totalCount = (decimal?)deviceInfo.Count ?? decimal.Zero; totalPrice = (decimal?)deviceInfo.TotalAmount ?? decimal.Zero; } //if if (workInfo != null) { totalCount += (decimal?)workInfo.Count ?? 0; totalPrice += (decimal?)workInfo.Amount ?? decimal.Zero; } //if contextBuilder.Add(new SimpleContextItem(ContextConstants.TotalItemsCount, DecimalToString(totalCount))); contextBuilder.Add(new SimpleContextItem(ContextConstants.TotalItemsAmount, DecimalToString(totalPrice))); contextBuilder.Add(new SimpleContextItem(ContextConstants.TotalItemsAmountRus, RusCurrency.StrRur((double)totalPrice))); return(contextBuilder.Create(customReport.HtmlContent)); }