예제 #1
0
        /// <summary>
        /// Get our BL object from the JSON object
        /// </summary>
        /// <param name="jsonObject">The json object.</param>
        /// <returns></returns>
        private BLInformationBE GetBLFromJsonObject(JsonBE jsonObject, String delvType, String nextExternalDirectory)
        {
            BLInformationBE bonDeLivraison = new BLInformationBE();

            ApplicationBE application = new ApplicationBE();

            //assigned the application quadri
            //it is the only variable that is used for the BL
            //no need to assigned the others
            application.Quadri = jsonObject.Step1.ApplicationQuadri;

            bonDeLivraison.App = application;

            //parse the ITF to number
            bonDeLivraison.IFT = int.Parse(jsonObject.Step1.ITFNumber);

            //get the person name and assigned it to the object
            bonDeLivraison.PreparedBy = TransversalDA.GetPersonDetailsByID(jsonObject.Step2.PreparedBy).name;
            bonDeLivraison.ApprovedBy = TransversalDA.GetPersonDetailsByID(jsonObject.Step2.ApprovedBy).name;

            //parse the delivery date date
            DateTime deliveryDate = DateTime.Parse(jsonObject.Step2.DeliveryDate);

            //both dates will be the same !!
            bonDeLivraison.PreparedDate = deliveryDate;
            bonDeLivraison.ApprovedDate = deliveryDate;

            Collection<BLDeliverableBE> bonDeLivraisonDeliverableCol = new Collection<BLDeliverableBE>();

            int countDeliverables = 1;

            foreach (String item in jsonObject.Step1.SVNLinkAndVersion)
            {
                //split the string to an array to get the
                //other items
                String[] splitLinkAndVersionItem = item.Split(';');

                BLDeliverableBE bonDeLivraisonDeliverable = new BLDeliverableBE();

            #warning add version
                bonDeLivraisonDeliverable.ID = countDeliverables;
                bonDeLivraisonDeliverable.Name = splitLinkAndVersionItem[0];
                bonDeLivraisonDeliverable.Etiquette = splitLinkAndVersionItem[1];

                //only for those two we don't put version number
                if ((bonDeLivraisonDeliverable.Name == "DB") || (bonDeLivraisonDeliverable.Name == "K2PROCESS"))
                {
                    bonDeLivraisonDeliverable.Version = String.Empty;
                }
                else
                {
                    bonDeLivraisonDeliverable.Version = jsonObject.Step1.NewVersion.Substring(0, 5);
                }

                //bonDeLivraisonDeliverable.Version = splitLinkAndVersionItem[2];
                bonDeLivraisonDeliverable.Location = DirectoryManagementDA.GetDistributionDirectoryPath(application.Quadri, delvType,
                    bonDeLivraisonDeliverable.Name, bonDeLivraison.IFT.ToString(), nextExternalDirectory);

                bonDeLivraisonDeliverableCol.Add(bonDeLivraisonDeliverable);

                countDeliverables++;
            }

            String[] splitChangeAndQCItem = jsonObject.Step2.ChangeQCAndDescription.Split(';');

            bonDeLivraison.Reference = splitChangeAndQCItem[0];
            bonDeLivraison.ReferenceDescription = splitChangeAndQCItem[1];

            //assigned the deliverable collection
            bonDeLivraison.BLSoftwareDeliverableCol = bonDeLivraisonDeliverableCol;

            Collection<BLDocumentationBE> bonDeLivraisonDocumentationCol = new Collection<BLDocumentationBE>();

            int countDocDeliverables = 1;

            foreach (String item in jsonObject.Step2.Documentation)
            {
                //split the string to an array to get the
                //other items
                String[] splitLinkAndVersionItem = item.Split(';');

                BLDocumentationBE bonDeLivraisonDoc = new BLDocumentationBE();

                bonDeLivraisonDoc.ID = countDocDeliverables;
                bonDeLivraisonDoc.DocName = splitLinkAndVersionItem[0];
                bonDeLivraisonDoc.Location = splitLinkAndVersionItem[1];
                bonDeLivraisonDoc.Remark = splitLinkAndVersionItem[2];

                //we are changin version
                if (jsonObject.Step1.NewVersion != jsonObject.Step1.OldVersion)
                {
                    bonDeLivraisonDoc.Version = jsonObject.Step1.NewVersion.Substring(0, 5);
                }
                else
                {
                    bonDeLivraisonDoc.Version = "1.0.0";
                }

                bonDeLivraisonDocumentationCol.Add(bonDeLivraisonDoc);

                countDocDeliverables++;
            }

            //assigned the document collection
            bonDeLivraison.BLDocumentDeliverableCol = bonDeLivraisonDocumentationCol;

            return bonDeLivraison;
        }
예제 #2
0
        /// <summary>
        /// Generate a new Bon De Livraison Document
        /// Step1.Get the BL template
        /// Step2.Copy it to its new location
        /// Step3.Rename it
        /// Step4.Insert all required values
        /// </summary>
        /// <param name="blInformation">The bon de livraison parameters</param>
        /// <param name="outputPath">The output path.</param>
        public static void GenerateBL(BLInformationBE blInformation, String outputPath)
        {
            //path to the bl template
            String blTemplatePath = ConstantBE.TEMPLATEPATH + '\\' + ConstantBE.BLTEMPLATEFILE;

            //the BL name Ex. BL_IPRI_ITF587_20120328
            //BL_{0}_{1}_{2}
            String blNewName = String.Format(ConstantBE.BLFORMAT,
                blInformation.App.Quadri,
                "ITF" + blInformation.IFT,
                blInformation.ApprovedDate.ToString("yyyyMMdd"));

            //build the output path
            /*String outputPath = ContantsBE.OUTPUTPATH +
                "ITF" + blInformation.IFT + "\\" +
                blNewName + ".docx";
            */

            outputPath += blNewName + ".docx";

            //copy the bl template to a new location and rename it accordingly
            DirectoryManagementDA.CopyFileAndRename(blTemplatePath, outputPath);

            //open the copied file in its new location for modification
            using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(outputPath, true))
            {
                //get the document body
                MainDocumentPart mainDocPart = wordDoc.MainDocumentPart;

                #region ITF

                //get only the ITF body from the document
                SdtBlock itfBody = OpenXmlHelpers.GetContentControl(mainDocPart, ConstantBE.ITFBODY);

                //Get the table in the itf info tag
                Table itfBodyTable = itfBody.Descendants<Table>().Single();

                //As the TAG is in a table we have to get the table element first.
                //then filter further down to get the element
                SdtRun itfTagRR = itfBodyTable.Elements<TableRow>().FirstOrDefault()
                                                .Elements<TableCell>().FirstOrDefault()
                                                .Elements<Paragraph>().FirstOrDefault()
                                                .Elements<SdtRun>().Where
                        (r => r.SdtProperties.GetFirstChild<Tag>().Val == ConstantBE.ITFNO).Single();

                //set the ITF number
                itfTagRR.Descendants<Text>().Single().Text = blInformation.IFT.ToString();

                #endregion

                #region Info

                //get only the Info body from the document
                SdtBlock infoBody = OpenXmlHelpers.GetContentControl(mainDocPart, ConstantBE.INFOBODY);

                //Get the table in the info tag
                Table infoBodyTable = infoBody.Descendants<Table>().Single();

                #region Row 1

                SdtRun prepareByTagRR = infoBodyTable.Elements<TableRow>().ElementAt(0)
                                       .Elements<TableCell>().ElementAt(0)
                                       .Elements<Paragraph>().FirstOrDefault()
                                       .Elements<SdtRun>().Where
                        (r => r.SdtProperties.GetFirstChild<Tag>().Val == ConstantBE.PREPAREDBY).Single();

                //set the prepared by text
                prepareByTagRR.Descendants<Text>().Single().Text = blInformation.PreparedBy;

                SdtRun prepareDateTagRR = infoBodyTable.Elements<TableRow>().ElementAt(0)
                                                         .Elements<TableCell>().ElementAt(1)
                                                         .Elements<Paragraph>().FirstOrDefault()
                                                         .Elements<SdtRun>().Where
                        (r => r.SdtProperties.GetFirstChild<Tag>().Val == ConstantBE.PREPAREDDATE).Single();

                //set the prepared date text
                prepareDateTagRR.Descendants<Text>().Single().Text = blInformation.PreparedDate.ToString("dd/MM/yyyy");

                #endregion

                #region Row 2

                SdtRun approvedByTagRR = infoBodyTable.Elements<TableRow>().ElementAt(1)
                                        .Elements<TableCell>().ElementAt(0)
                                        .Elements<Paragraph>().FirstOrDefault()
                                        .Elements<SdtRun>().Where
                        (r => r.SdtProperties.GetFirstChild<Tag>().Val == ConstantBE.APPROVEDBY).Single();

                //set the approved by text
                approvedByTagRR.Descendants<Text>().Single().Text = blInformation.ApprovedBy;

                SdtRun approvedDateTagRR = infoBodyTable.Elements<TableRow>().ElementAt(1)
                                                         .Elements<TableCell>().ElementAt(1)
                                                         .Elements<Paragraph>().FirstOrDefault()
                                                         .Elements<SdtRun>().Where
                        (r => r.SdtProperties.GetFirstChild<Tag>().Val == ConstantBE.APPROVEDDATE).Single();

                //set the approved date text
                approvedDateTagRR.Descendants<Text>().Single().Text = blInformation.ApprovedDate.ToString("dd/MM/yyyy");

                #endregion

                #region Row 3

                SdtRun referenceTagRR = infoBodyTable.Elements<TableRow>().ElementAt(2)
                                                        .Elements<TableCell>().ElementAt(0)
                                                        .Elements<Paragraph>().FirstOrDefault()
                                                        .Elements<SdtRun>().Where
                        (r => r.SdtProperties.GetFirstChild<Tag>().Val == ConstantBE.REFERENCE).Single();

                //remove the vertical bar with blank space and set the reference text
                referenceTagRR.Descendants<Text>().Single().Text = blInformation.Reference.Replace('|', ' ');

                // if you want the each reference on each line just uncomment the following codes

                /*
                //split the string
                String[] splitedReference = blInformation.Reference.Split('|');

                //set the reference text
                foreach (String item in splitedReference)
                {
                    Run newRun = new Run();

                    //add a new line and the append the item
                    newRun.AppendChild(new Break());
                    newRun.AppendChild(new Text(item));

                    referenceTagRR.SdtContentRun.Append(newRun);

                }
                */

                #endregion

                #region Row 4

                //find the reference description tag
                SdtRun referenceShortDescTagRR = infoBodyTable.Elements<TableRow>().ElementAt(3)
                                        .Elements<TableCell>().ElementAt(0)
                                        .Elements<Paragraph>().FirstOrDefault()
                                        .Elements<SdtRun>().Where
                        (r => r.SdtProperties.GetFirstChild<Tag>().Val == ConstantBE.REFERENCESHORTDESC).Single();

                //clear the tag
                referenceShortDescTagRR.Descendants<Text>().Single().Text = " ";

                //split the string
                String[] splitedRefDescription = blInformation.ReferenceDescription.Split('|');

                //set the reference short description text
                foreach (String item in splitedRefDescription)
                {
                    Run newRun = new Run();

                    //add a new line and the append the item
                    newRun.AppendChild(new Break());
                    newRun.AppendChild(new Text(item));

                    referenceShortDescTagRR.SdtContentRun.Append(newRun);

                }

                //referenceShortDescTagRR.Descendants<Text>().Single().Text = blInformation.ReferenceDescription;

                #endregion

                #endregion

                #region Software

                //get only the software body from the document
                SdtBlock softwareBody = OpenXmlHelpers.GetContentControl(mainDocPart, ConstantBE.SOFTWAREBODY);

                //Get the table in the software tag
                Table softwareBodyTable = softwareBody.Descendants<Table>().Single();

                TableRow softRow = softwareBodyTable.Elements<TableRow>().Last();

                foreach (BLDeliverableBE item in blInformation.BLSoftwareDeliverableCol)
                {
                    TableRow rowCopy = (TableRow)softRow.CloneNode(true);

                    //No
                    rowCopy.Descendants<TableCell>().ElementAt(0).Elements<Paragraph>().First()
                        .Append((new Run(new Text(item.ID.ToString()))));

                    //Nom du livrable
                    rowCopy.Descendants<TableCell>().ElementAt(1).Elements<Paragraph>().First()
                        .Append((new Run(new Text(item.Name))));

                    if ((!String.IsNullOrEmpty(item.Version)) && (item.Version.Count() == 7))
                    {
                        //Version - truncate it to 3 digit Ex 2.0.2.1 to 2.0.2
                        rowCopy.Descendants<TableCell>().ElementAt(2).Elements<Paragraph>().First()
                            .Append((new Run(new Text(item.Version.Substring(0, 5)))));
                    }
                    else
                    {
                        rowCopy.Descendants<TableCell>().ElementAt(2).Elements<Paragraph>().First()
                            .Append((new Run(new Text(item.Version))));
                    }

                    //Emplacement Distribution
                    rowCopy.Descendants<TableCell>().ElementAt(3).Elements<Paragraph>().First()
                        .Append((new Run(new Text(item.Location))));

                    //Emplacement de l’étiquette
                    rowCopy.Descendants<TableCell>().ElementAt(4).Elements<Paragraph>().First()
                        .Append((new Run(new Text(item.Etiquette))));

                    softwareBodyTable.AppendChild(rowCopy);

                }

                softwareBodyTable.RemoveChild(softRow);

                #endregion

                #region Documentation

                //get only the document body from the document
                SdtBlock documentBody = OpenXmlHelpers.GetContentControl(mainDocPart, ConstantBE.DOCUMENTBODY);

                //Get the table in the document tag
                Table documentBodyTable = documentBody.Descendants<Table>().Single();

                TableRow docRow = documentBodyTable.Elements<TableRow>().Last();

                foreach (BLDocumentationBE item in blInformation.BLDocumentDeliverableCol)
                {
                    TableRow rowCopy = (TableRow)docRow.CloneNode(true);

                    //No
                    rowCopy.Descendants<TableCell>().ElementAt(0).Elements<Paragraph>().First()
                        .Append((new Run(new Text(item.ID.ToString()))));

                    //Document
                    rowCopy.Descendants<TableCell>().ElementAt(1).Elements<Paragraph>().First()
                        .Append((new Run(new Text(item.DocName))));

                    //Version
                    rowCopy.Descendants<TableCell>().ElementAt(2).Elements<Paragraph>().First()
                        .Append((new Run(new Text(item.Version))));

                    //Emplacement
                    rowCopy.Descendants<TableCell>().ElementAt(3).Elements<Paragraph>().First()
                        .Append((new Run(new Text(item.Location))));

                    //Remarques
                    rowCopy.Descendants<TableCell>().ElementAt(4).Elements<Paragraph>().First()
                        .Append((new Run(new Text(item.Remark))));

                    documentBodyTable.AppendChild(rowCopy);

                }

                documentBodyTable.RemoveChild(docRow);

                #endregion

                //save the changes to the document
                mainDocPart.Document.Save();

                //write the changes to disk
                using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
                {
                    sw.Write(mainDocPart);
                }
            }
        }