Пример #1
0
        /// <summary>
        /// Generate release note report
        /// </summary>
        /// <param name="release">Model</param>
        /// <param name="templatePath">Path of template</param>
        /// <param name="errorValidation">Returns errors</param>
        /// <returns></returns>
        public static MemoryStream GenerateReleaseNoteReport(ReleaseNote release, string templatePath, out string errorValidation)
        {
            //Put in memory the template file
            byte[] byteArray = File.ReadAllBytes(templatePath);
            errorValidation = string.Empty;

            MemoryStream ms = new MemoryStream();
            ms.Write(byteArray, 0, (int)byteArray.Length);

            using (WordprocessingDocument theDoc = WordprocessingDocument.Open(ms, true))
            {
                MainDocumentPart mainPart = theDoc.MainDocumentPart;

                List<string> logs = ValidateReleaseNoteReport(release, mainPart);
                if (logs.Count > 0)
                {
                    errorValidation = "The release template has an incorrect format: \r\n\t";
                    errorValidation += string.Join("\r\n\t", logs);
                    return null;
                }

                var sdtElements = mainPart.Document.Body.Descendants<SdtElement>(); //includes runs, blocks, cells
                string certificateNumber = release.Certificate.Sequential;
                InsertInBlock(sdtElements, "EntryPoint", release.Certificate.EntryPoint.Name);
                InsertInBlock(sdtElements, "ImporterName", release.ImporterName);
                InsertInBlock(sdtElements, "CertificateNumber", certificateNumber);
                var checks = mainPart.Document.Body.Descendants<FieldChar>().Where(x => x.FieldCharType == FieldCharValues.Begin);
                bool visuallyCheck = release.VisuallyCheck.HasValue ? release.VisuallyCheck.Value : false;
                bool isClosed = release.Certificate.WorkflowStatusId == WorkflowStatusEnum.Closed ? true : false;
                bool isPartial = release.PartialComplete.GetValueOrDefault();
                bool isCompleted = !isPartial;
                foreach (var item in checks)
                {
                    if (((FormFieldName)item.FormFieldData.FirstChild).Val == "VisuallyCheck" || ((FormFieldName)item.FormFieldData.FirstChild).Val == "VisuallyCheckArabic")
                    {
                        ((DefaultCheckBoxFormFieldState)item.FormFieldData.GetFirstChild<CheckBox>().LastChild).Val = visuallyCheck == true ? new OnOffValue(true) : new OnOffValue(false);
                    }
                    else
                    {
                        if (((FormFieldName)item.FormFieldData.FirstChild).Val == "Complete")
                        {
                            ((DefaultCheckBoxFormFieldState)item.FormFieldData.GetFirstChild<CheckBox>().LastChild).Val = isCompleted == true ? new OnOffValue(true) : new OnOffValue(false);
                        }
                        else if (((FormFieldName)item.FormFieldData.FirstChild).Val == "Partial")
                        {
                            ((DefaultCheckBoxFormFieldState)item.FormFieldData.GetFirstChild<CheckBox>().LastChild).Val = isPartial == true ? new OnOffValue(true) : new OnOffValue(false);
                        }
                    }
                }
                InsertInBlock(sdtElements, "ContainersDetails", release.ContainersDetails);
                InsertInBlock(sdtElements, "ImportDocumentDetails", release.ImportDocumentDetails);
                InsertInBlock(sdtElements, "NumberLineItems", release.NumberLineItems.GetValueOrDefault().ToString());

                InsertInBlock(sdtElements, "ShipmentType", release.ShipmentType.GetValueOrDefault().ToString());
                InsertInBlock(sdtElements, "ShipmentTypeArabic", release.ShipmentType.GetValueOrDefault().ToString());

                InsertInBlock(sdtElements, "Unit", release.Unit);
                InsertInBlock(sdtElements, "ReceivedQty", release.ReceivedQuantity.GetValueOrDefault().ToString());
                InsertInBlock(sdtElements, "RemanQty", release.RemainingQuantity.GetValueOrDefault().ToString());

                decimal totalqty = release.ReceivedQuantity.GetValueOrDefault() + release.RemainingQuantity.GetValueOrDefault();
                InsertInBlock(sdtElements, "TotalQty", totalqty.ToString());

                InsertInBlock(sdtElements, "Comments", release.Comments);
                InsertInBlock(sdtElements, "CertificateNumberPartial", string.Format("{0}/{1:000}", certificateNumber, release.PartialNumber));
                InsertInBlock(sdtElements, "IssuanceDate", release.IssuanceDate.ToString("dd/MM/yyyy"));

                // Save the changes to the table back into the document.
                mainPart.Document.Save();

            }

            return ms;
        }
Пример #2
0
        /// <summary>
        /// Validate if the document is ok before fill all fields
        /// </summary>
        /// <param name="model">Model</param>
        /// <param name="mainPart">Document</param>
        /// <returns>List of errors</returns>
        public static List<string> ValidateReleaseNoteReport(ReleaseNote model, MainDocumentPart mainPart)
        {
            List<string> logs = new List<string>();

            var sdtBodyElements = mainPart.Document.Body.Descendants<SdtElement>();
            ValidateInBlock(sdtBodyElements, "EntryPoint", logs);
            ValidateInBlock(sdtBodyElements, "ImporterName", logs);
            ValidateInBlock(sdtBodyElements, "CertificateNumber", logs);
            ValidateInBlock(sdtBodyElements, "ContainersDetails", logs);
            ValidateInBlock(sdtBodyElements, "ImportDocumentDetails", logs);
            ValidateInBlock(sdtBodyElements, "ShipmentType", logs);
            ValidateInBlock(sdtBodyElements, "ShipmentTypeArabic", logs);
            ValidateInBlock(sdtBodyElements, "Unit", logs);
            ValidateInBlock(sdtBodyElements, "ReceivedQty", logs);
            ValidateInBlock(sdtBodyElements, "RemanQty", logs);
            ValidateInBlock(sdtBodyElements, "TotalQty", logs);
            ValidateInBlock(sdtBodyElements, "Comments", logs);
            ValidateInBlock(sdtBodyElements, "CertificateNumberPartial", logs);
            ValidateInBlock(sdtBodyElements, "IssuanceDate", logs);

            return logs;
        }
Пример #3
0
 /// <summary>
 /// Execute the click event of the button new
 /// </summary>
 private void ExecuteNewReleaseNoteCommand()
 {
     ReleaseNote newReleaseNote = new ReleaseNote { CertificateId = _certificate.CertificateId, Certificate = _certificate, IssuanceDate = DateTime.Now };
     ReleaseNoteViewModel model = new ReleaseNoteViewModel(newReleaseNote);
     model.SavedItem += OnReleaseNoteSaved;
     model.ReloadDocuments += ReleaseDocumentReloadDocuments;
     ReleaseNoteEditionRequested(this, new ContextEditionEventArgs<ReleaseNoteViewModel>(model));
 }
Пример #4
0
 /// <summary>
 /// Command to view the document associated with the ReleaseNote
 /// </summary>
 /// <param name="item">ReleaseNote item parameter</param>
 private void ViewReleaseNote(ReleaseNote item)
 {
     IsBusy = true;
     _context.GetDocumentByReleaseNoteId(item.ReleaseNoteId, CompletedViewReleaseNote, null);
 }
Пример #5
0
 /// <summary>
 /// Command to edit ReleaseNote
 /// </summary>
 /// <param name="item">ReleaseNote item parameter</param>
 private void EditReleaseNote(ReleaseNote item)
 {
     if (ReleaseNoteEditionRequested != null)
     {
         item.Certificate = _certificate;
         ReleaseNoteViewModel model = new ReleaseNoteViewModel(item);
         model.SavedItem += OnReleaseNoteSaved;
         model.ReloadDocuments += ReleaseDocumentReloadDocuments;
         ReleaseNoteEditionRequested(this, new ContextEditionEventArgs<ReleaseNoteViewModel>(model));
     }
 }