Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using EleWise.ELMA.API;
- using EleWise.ELMA.Model.Common;
- using System.Web;
- using EleWise.ELMA.Model.Entities;
- using EleWise.ELMA.Model.Managers;
- using EleWise.ELMA.Model.Types.Settings;
- using EleWise.ELMA.Model.Entities.ProcessContext;
- using Context = EleWise.ELMA.Model.Entities.ProcessContext.P_ImportDogovorovObnovlenn;
- using Aspose.Cells;
- using EleWise.ELMA.Documents.Models;
- using EleWise.ELMA.CRM.Models;
- using EleWise.ELMA.ConfigurationModel;
- using System.IO;
- using EleWise.ELMA.Services;
- using EleWise.ELMA.Runtime.Managers;
- namespace EleWise.ELMA.Model.Scripts
- {
- /// <summary>
- /// Модуль сценариев процесса "Импорт договоров (обновленный)"
- /// </summary>
- /// <example>
- /// <![CDATA[
- /// >>>>>>>>>>>>>>>ВАЖНАЯ ИНФОРМАЦИЯ!!!<<<<<<<<<<<<<<<
- /// Данный редактор создан для работы с PublicAPI.
- /// PublicAPI предназначен для разработки сценариев ELMA.
- /// Например, с помощью PublicAPI можно добавить комментарий к документу:
- /// //Загружаем документ
- /// var doc = PublicAPI.Docflow.Document.Load(56);
- /// //Добавляем комментарий
- /// PublicAPI.Docflow.Document.AddComment(doc, "тут ваш комментарий");
- ///
- /// Более подробно про PublicAPI вы можете узнать тут: http://www.elma-bpm.ru/kb/article-642ApiRoot.html
- ///
- /// Если же вам нужна более серьёзная разработка, выходящая за рамки PublicAPI, используйте
- /// сторонние редакторы кода, такие как SharpDevelop и VisualStudio.
- /// Информацию по запуску кода в стороннем редакторе вы можете найти тут:
- /// http://www.elma-bpm.ru/kb/article-837.html
- /// ]]>
- /// </example>
- public partial class P_ImportDogovorovObnovlenn_Scripts : EleWise.ELMA.Workflow.Scripts.ProcessScriptBase<Context>
- {
- /// <summary>
- /// OnChangeFilepath
- /// </summary>
- /// <param name="context">Контекст процесса</param>
- /// <param name="form"></param>
- public virtual void OnChangeFilepath(Context context, EleWise.ELMA.Model.Views.FormViewBuilder<Context> form)
- {
- if (System.IO.Directory.Exists(context.FolderPath))
- {
- context.Alert = new HtmlString("Папка существует");
- } else
- {
- context.Alert = new HtmlString("Папка не существует или нет доступа!");
- }
- }
- /// <summary>
- /// OnChangeFile
- /// </summary>
- /// <param name="context">Контекст процесса</param>
- /// <param name="form"></param>
- public virtual void OnChangeFile(Context context, EleWise.ELMA.Model.Views.FormViewBuilder<Context> form)
- {
- ClearBlcok(context);
- try
- {
- if (context.ContractsFile != null)
- {
- var service = EleWise.ELMA.Services.Locator.GetService<Impeltech.Porsche.Settings.PorscheSettingsModule>();
- Workbook book = new Workbook(context.ContractsFile.ContentFilePath);
- //первая страница
- Worksheet sheet = book.Worksheets.FirstOrDefault();
- if (sheet != null)
- {
- for (int y = (int)context.RowsFrom; y < context.RowsFrom + 100; y++)
- {
- var row = new P_ImportDogovorovObnovlenn_FirstContracts();
- for (var x = 0; x < sheet.Cells.Columns.Count; x++)
- {
- FillRowBySheet(row, sheet, x, y);
- }
- if (!string.IsNullOrWhiteSpace(row.Number))
- {
- row.Parent = context;
- row.Save();
- context.FirstContracts.Add(row);
- }
- }
- }
- }
- } catch (Exception ex)
- {
- context.Alert = new HtmlString(ex.Message);
- }
- context.Save();
- }
- private void FillRowBySheet(P_ImportDogovorovObnovlenn_FirstContracts row, Worksheet sheet, int x, int y)
- {
- var headerCell = sheet.Cells[GetIndex(x, 2)];
- var currentCell = sheet.Cells[GetIndex(x, y)];
- if (currentCell != null && headerCell != null && !string.IsNullOrWhiteSpace(headerCell.StringValue))
- {
- switch (headerCell.StringValue.ToLower().Trim())
- {
- case "партнер":
- row.Partner = currentCell.StringValue.Trim();
- break;
- case "дата договора":
- DateTime contractDate;
- if (DateTime.TryParse(currentCell.StringValue, out contractDate))
- {
- row.ContractDate = contractDate;
- }
- break;
- case "номер":
- row.Number = currentCell.StringValue.Trim();
- break;
- case "срок действия":
- row.EndDate = currentCell.StringValue.Trim();
- break;
- case "предмет":
- row.Subject = currentCell.StringValue.Trim();
- break;
- case "раздел":
- row.Section = currentCell.StringValue.Trim();
- break;
- case "дополнительные соглашения":
- row.AddContract = currentCell.StringValue.Trim();
- break;
- }
- }
- }
- public string GetIndex(int x, int y)
- {
- return Alfabet[x] + y.ToString();
- }
- public string Alfabet {
- get {
- return "ABCDEFGHIJKLMNOPQRST";
- }
- }
- /// <summary>
- /// CreateContractors
- /// </summary>
- /// <param name="context">Контекст процесса</param>
- /// <param name="form"></param>
- public virtual void CreateContractors(Context context, EleWise.ELMA.Model.Views.FormViewBuilder<Context> form)
- {
- foreach (var itemGrouped in context.FirstContracts.Where(l => !string.IsNullOrWhiteSpace(l.Partner) && l.Contractor == null).GroupBy(c => c.Partner))
- {
- var contractor = EntityManager<ContractorLegal>.Instance.Create();
- contractor.Name = itemGrouped.Key;
- contractor.Save();
- foreach (var item in itemGrouped)
- {
- item.Contractor = contractor;
- item.Save();
- }
- }
- }
- /// <summary>
- /// ClearWithErrors
- /// </summary>
- /// <param name="context">Контекст процесса</param>
- /// <param name="form"></param>
- public virtual void ClearWithErrors(Context context, EleWise.ELMA.Model.Views.FormViewBuilder<Context> form)
- {
- var toClear = context.FirstContracts.Where(c => c.Deparment == null || !c.ContractDate.HasValue || !(c.EndDateDate.HasValue || c.ContractExpirationTerm != null) || c.Contractor == null || !(c.Files.Any() || c.CreateIfFilesEmpty)).ToList();
- foreach (var element in toClear)
- {
- context.FirstContracts.Remove(element);
- element.Delete();
- }
- }
- /// <summary>
- /// SetCreateIfFilesEmpty
- /// </summary>
- /// <param name="context">Контекст процесса</param>
- /// <param name="form"></param>
- public virtual void SetCreateIfFilesEmpty(Context context, EleWise.ELMA.Model.Views.FormViewBuilder<Context> form)
- {
- foreach (var item in context.FirstContracts)
- {
- item.CreateIfFilesEmpty = true;
- item.Save();
- }
- }
- /// <summary>
- /// Search
- /// </summary>
- /// <param name="context">Контекст процесса</param>
- public virtual void Search(Context context)
- {
- var htmlErrors = string.Empty;
- foreach (var item in context.FirstContracts)
- {
- item.PorshceContract = EntityManager<ProscheContract>.Instance.Find(c => c.Number == item.Number && item.Subject == item.Subject).FirstOrDefault(c => {
- var doc = EntityManager<Document>.Instance.LoadOrNull(item.Id);
- return doc != null && doc.IsDeleted == false && doc.IsArchived == false;
- });
- item.Contractor = EntityManager<Contractor>.Instance.Find(c => c.Name == item.Partner).FirstOrDefault();
- DateTime contractEndDate;
- if (DateTime.TryParse(item.EndDate, out contractEndDate))
- {
- item.EndDateDate = contractEndDate;
- } else
- {
- if (!string.IsNullOrWhiteSpace(item.EndDate) && item.EndDate.ToLower().Contains("доиспобязательств"))
- {
- item.ContractExpirationTerm = ConfigurationModel.ContractEpiration.FulfillmentObligations;
- }
- }
- item.Deparment = EntityManager<ConfigurationModel.PartitionPorsche>.Instance.Find(p => p.Name == item.Section).FirstOrDefault();
- var service = EleWise.ELMA.Services.Locator.GetService<Impeltech.Porsche.Settings.PorscheSettingsModule>();
- if (item.Number.Length < service.Settings.MinNumber)
- {
- htmlErrors += string.Format("<br/> {0} - длина меншье {1}", item.Number, service.Settings.MinNumber);
- } else
- {
- var filePaths = GetFiles(context.FolderPath, item.Number);
- if (filePaths.Any())
- {
- item.Files.AddAll(filePaths.Select(c => {
- var filePath = new FilePath() {
- FullFilePath = c
- };
- filePath.Save();
- return filePath;
- }));
- }
- }
- item.Parent = context;
- item.Save();
- context.FirstContracts.Add(item);
- }
- context.Save();
- }
- /// <summary>
- /// Поиск с учетом прав доступа
- /// </summary>
- /// <param name="folder"></param>
- /// <param name="name"></param>
- /// <returns></returns>
- private IEnumerable<string> GetFiles(string folder, string name)
- {
- var searchPattern = string.Format("*{0}*", CleanFileName(name));
- return System.IO.Directory.GetFiles(folder, searchPattern, System.IO.SearchOption.AllDirectories).Where(c => System.IO.File.Exists(c));
- }
- public string CleanFileName(string name)
- {
- return string.Join(string.Empty, name.Split(System.IO.Path.GetInvalidFileNameChars(), StringSplitOptions.RemoveEmptyEntries));
- }
- /// <summary>
- /// OnChangeOurLegalContractor
- /// </summary>
- /// <param name="context">Контекст процесса</param>
- /// <param name="form"></param>
- public virtual void OnChangeOurLegalContractor(Context context, EleWise.ELMA.Model.Views.FormViewBuilder<Context> form)
- {
- if (context.MyLegalPerson != null && context.MyLegalPerson.DocumentFolder != null)
- {
- context.Alert = new HtmlString("Папка нашего Юр. лица в ELMA найдена");
- } else
- {
- context.Alert = new HtmlString("Папка нашего Юр. лица отсутствует! ");
- }
- }
- /// <summary>
- /// ClearBlcok
- /// </summary>
- /// <param name="context">Контекст процесса</param>
- public virtual void ClearBlcok(Context context)
- {
- var toClear = context.FirstContracts.ToList();
- foreach (var element in toClear)
- {
- context.FirstContracts.Remove(element);
- element.Delete();
- }
- }
- /// <summary>
- /// Apply
- /// </summary>
- /// <param name="context">Контекст процесса</param>
- public virtual void Apply(Context context)
- {
- foreach (var row in context.FirstContracts)
- {
- if (row.PorshceContract == null && row.CreateIfFilesEmpty)
- {
- row.PorshceContract = EntityManager<ProscheContract>.Create();
- }
- if (row.PorshceContract != null)
- {
- row.PorshceContract.MyLegalPerson = context.MyLegalPerson;
- row.PorshceContract.Number = row.Number;
- row.PorshceContract.Subject = row.Subject;
- row.PorshceContract.ContractStartDate = row.ContractDate;
- row.PorshceContract.Description = row.AddContract;
- row.PorshceContract.NotifyAboutExpiration = false;
- if (row.EndDateDate.HasValue)
- {
- row.PorshceContract.ContractEndDate = row.EndDateDate;
- } else
- {
- row.PorshceContract.ContractExpirationTerm = row.ContractExpirationTerm;
- }
- row.PorshceContract.Contractor = row.Contractor;
- row.PorshceContract.PartitionPorsche = row.Deparment;
- row.PorshceContract.Name = "Agreement " + row.Subject + " " + row.Contractor.Name;
- AddFiles(row.PorshceContract, row.Files);
- row.PorshceContract.Save();
- row.Save();
- }
- }
- }
- private void AddFiles(ProscheContract proscheContract, Iesi.Collections.Generic.ISet<FilePath> files)
- {
- var service = Locator.GetServiceNotNull<IMimeMappingService>();
- var fileService = Locator.GetServiceNotNull<IFileManager>();
- var listAttachments = proscheContract.Attachments.Where(c => c.File != null && System.IO.File.Exists(c.File.ContentFilePath)).Select(c => new FileInfo(c.File.ContentFilePath));
- foreach (var item in files)
- {
- var currentFile = new FileInfo(item.FullFilePath);
- if (CheckNeedCopyFile(listAttachments, currentFile))
- {
- var attachment = new EleWise.ELMA.Common.Models.Attachment() {
- CreationDate = DateTime.Now,
- File = new Files.BinaryFile() {
- Name = item.Name,
- CreateDate = DateTime.Now,
- ContentType = service.GetTypeByExtension(currentFile.Extension)
- }
- };
- attachment.File.InitializeContentFilePath();
- System.IO.File.Copy(item.FullFilePath, attachment.File.ContentFilePath);
- fileService.SaveFile(attachment.File);
- attachment.Save();
- proscheContract.Attachments.Add(attachment);
- }
- }
- proscheContract.Save();
- }
- private bool CheckNeedCopyFile(IEnumerable<FileInfo> listAttachments, FileInfo currentFile)
- {
- return !listAttachments.Any(c => currentFile.Extension == c.Extension && c.CreationTimeUtc == currentFile.CreationTimeUtc && c.Length == currentFile.Length);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement