Example #1
0
    public string selectRFQ(long rfqHeaderKey, long eavKey, float newBomCost)
    {
        saveRFQSummary();

        RfqCRUD        rfqCRUD        = new RfqCRUD();
        RfqSummaryCRUD rfqSummaryCRUD = new RfqSummaryCRUD();

        RFQ rfq = rfqCRUD.readById(rfqHeaderKey);
        //List<RFQSummary> rfqSummaryList = rfqSummaryCRUD.readByBOMDetailIDAndEAU(rfq.BomDetailId, rfqSummary.EstimatedAnnualVolume);
        List <RFQ> rfqList = rfqCRUD.readByBOMDetailKey(rfq.BomDetailId);

        RFQEAVCRUD rfqEAV_CRUD = new RFQEAVCRUD();
        RFQEAV     eavSelected = rfqEAV_CRUD.readById(eavKey);

        bomDetailCRUD bomDetailCRUD = new bomDetailCRUD();
        BOMDetail     bomDetail     = bomDetailCRUD.readById(rfq.BomDetailId);

        ConnectionManager CM = new ConnectionManager();

        Data_Base_MNG.SQL DM = CM.getDataManager();

        List <RFQEAV> eavList = new List <RFQEAV>();

        foreach (RFQ rfqObj in rfqList)
        {
            eavList.AddRange(rfqEAV_CRUD.readByParentID(rfqObj.Id));
        }

        /*Begin Transaction*/
        DM.Open_Connection("RFQ Selection");

        foreach (RFQ rfqObj in rfqList)
        {
            foreach (RFQEAV eavCurrent in eavList)
            {
                if (eavCurrent.Id != eavKey && eavCurrent.RfqHeaderKey == rfqObj.Id)
                {
                    eavCurrent.Status = "DISMISSED";
                    if (rfqObj.NoQuote == true)
                    {
                        eavCurrent.Status = "NO QUOTE";
                    }
                    if (!rfqEAV_CRUD.update(eavCurrent, ref DM))
                    {
                        return("ERROR:" + rfqEAV_CRUD.ErrorMessage);
                    }
                }
            }
            if (rfqObj.Id != rfq.Id)
            {
                rfqObj.Status = "DISMISSED";
                if (rfqObj.NoQuote == true)
                {
                    rfqObj.Status = "NO QUOTE";
                }
                if (!rfqCRUD.update(rfqObj, ref DM))
                {
                    return("ERROR:" + rfqCRUD.ErrorMessage);
                }
            }
        }


        if (rfq != null)
        {
            rfq.Status = "SELECTED";
            if (!rfqCRUD.update(rfq, ref DM))
            {
                return("ERROR:" + rfqCRUD.ErrorMessage);
            }
            if (eavSelected != null)
            {
                eavSelected.Status = "SELECTED";
                if (!rfqEAV_CRUD.update(eavSelected, ref DM))
                {
                    return("ERROR:" + rfqEAV_CRUD.ErrorMessage);
                }

                if (bomDetail != null)
                {
                    if (newBomCost > -1)
                    {
                        bomDetail.Cost = newBomCost;
                    }
                    bomDetail.Status = "Processed";
                    if (!bomDetailCRUD.update(bomDetail, ref DM))
                    {
                        return("ERROR:" + bomDetailCRUD.ErrorMessage);
                    }
                }
                else
                {
                    DM.RollBack();
                    return("ERROR:There was an error retrieving BOM Detail for BomDetailKey = " + rfq.BomDetailId);
                }
            }
            else
            {
                DM.RollBack();
                return("ERROR:There was an error retrieving EAV entity for eavKey = " + eavKey);
            }
        }
        else
        {
            DM.RollBack();
            return("ERROR:Could not retrieve RFQ for ID = " + rfqHeaderKey);
        }

        DM.CommitTransaction();
        DM.Close_Open_Connection();

        if (DM.ErrorOccur)
        {
            return("ERROR:" + DM.Error_Mjs);
        }
        return(getRFQSummarybyBOMDetailID(rfq.BomDetailId));
    }
Example #2
0
    public string sendRFQ()
    {
        List <RFQ>      resultRFQs = new List <RFQ>();
        GatewayResponse response   = new GatewayResponse();
        String          s;
        NewRFQScreen    newRFQScreen;

        try
        {
            s            = new StreamReader(Request.InputStream).ReadToEnd();
            newRFQScreen = JsonConvert.DeserializeObject <NewRFQScreen>(s);
        }
        catch (Exception ex)
        {
            response.ErrorThrown         = true;
            response.ResponseDescription = "ERROR: When trying to parse JSON in server. " + ex.Message;
            return(JsonConvert.SerializeObject(response));
        }

        RFQNumberCRUD rfqNumberCRUD  = new RFQNumberCRUD();
        bomDetailCRUD bomDetail_CRUD = new bomDetailCRUD();
        UserCRUD      user_CRUD      = new UserCRUD();

        string baseBOMAttachmentsPath = ConfigurationManager.AppSettings["BOMLineAttachments"];
        string baseRFQAttachmentsPath = ConfigurationManager.AppSettings["RFQAttachmentsSent"];

        string strAuthUser = HttpContext.Current.User.Identity.Name;
        User   user        = user_CRUD.readById(strAuthUser);

        List <SIFDetail> EAUsList = newRFQScreen.SIFVolumesList;

        if (EAUsList.Count == 0)
        {
            response.ErrorThrown         = true;
            response.ResponseDescription = "ERROR: Cannot create RFQ without EAU specified.";
            return(JsonConvert.SerializeObject(response));
        }

        List <RFQEAV> newEAUList = new List <RFQEAV>();

        foreach (SIFDetail eau in EAUsList)
        {
            RFQEAV eauParsed = new RFQEAV();
            eauParsed.Volume = eau.ProjectedAnnualVolume;
            eauParsed.Year   = eau.ProgramYear;
            RFQEAV alreadyExists = newEAUList.Find(eauInternal => eauInternal.Volume == eauParsed.Volume);
            if (alreadyExists == null)
            {
                newEAUList.Add(eauParsed);
            }
            else
            {
                alreadyExists.Year = alreadyExists.Year.Trim() + ", " + eauParsed.Year.Trim();
            }
        }

        List <BOMDetail> bomDetailList = newRFQScreen.BomDetailList;


        ConnectionManager CM = new ConnectionManager();

        Data_Base_MNG.SQL DM = CM.getDataManager();

        if (newRFQScreen.SupplierList.Count > 0)
        {
            foreach (Supplier supplier in newRFQScreen.SupplierList)
            {
                foreach (BOMDetail component in bomDetailList)
                {
                    RFQNumberEntity rfqNumber = new RFQNumberEntity();

                    rfqNumber.BOMDetailKey = component.Id;
                    rfqNumber.SifHeaderKey = newRFQScreen.SIFHeaderID;
                    rfqNumber.RFQNumber    = rfqNumberCRUD.generateNewRFQNumber(rfqNumber.SifHeaderKey);

                    if (rfqNumber.RFQNumber == -1)
                    {
                        response.ErrorThrown         = true;
                        response.ResponseDescription = "ERROR: There was an error generating a new RFQ number.";
                        return(JsonConvert.SerializeObject(response));
                    }

                    CM = new ConnectionManager();
                    DM = CM.getDataManager();

                    /*Begin Transaction*/
                    DM.Open_Connection("Send New RFQ");

                    RFQ             rfq = new RFQ();
                    RFQNumberEntity rfqNumberGenereated = rfqNumberCRUD.create_return_object(rfqNumber, ref DM);
                    if (rfqNumberCRUD.ErrorOccur)
                    {
                        response.ErrorThrown         = true;
                        response.ResponseDescription = "ERROR:" + rfqNumberCRUD.ErrorMessage;
                        return(JsonConvert.SerializeObject(response));
                    }
                    else
                    {
                        //rfq.SentAttachmentsFolder = newRFQScreen.FolderAttachments;

                        newRFQScreen.FolderAttachments = newRFQScreen.FolderAttachments.Trim();
                        if (newRFQScreen.FolderAttachments != "")
                        {
                            if (System.IO.Directory.Exists((baseRFQAttachmentsPath + newRFQScreen.FolderAttachments)))
                            {
                                DirectoryInfo directory = new DirectoryInfo((baseRFQAttachmentsPath + newRFQScreen.FolderAttachments));
                                if (directory.GetFiles().Length > 0)
                                {
                                    string folderName = "";
                                    do
                                    {
                                        DateTime date = DateTime.Now;
                                        folderName = date.Year.ToString() + date.Month.ToString() +
                                                     date.Day.ToString() + "_" + MD5HashGenerator.GenerateKey(date);
                                    } while (Directory.Exists((baseRFQAttachmentsPath + folderName)));
                                    Directory.CreateDirectory((baseRFQAttachmentsPath + folderName));
                                    rfq.SentAttachmentsFolder = folderName;


                                    foreach (FileInfo file in directory.GetFiles())
                                    {
                                        try
                                        {
                                            File.Copy(file.FullName, (baseRFQAttachmentsPath + rfq.SentAttachmentsFolder + @"\" + file.Name), true);
                                        }
                                        catch (Exception ex)
                                        {
                                            response.ErrorThrown         = true;
                                            response.ResponseDescription = "ERROR:" + ex.Message;
                                            return(JsonConvert.SerializeObject(response));
                                        }
                                    }
                                }
                            }
                        }

                        foreach (Attachment bomAttachment in component.AttachmentsList)
                        {
                            if (rfq.SentAttachmentsFolder.Trim() == "")
                            {
                                string folderName = "";
                                do
                                {
                                    DateTime date = DateTime.Now;
                                    folderName = date.Year.ToString() + date.Month.ToString() +
                                                 date.Day.ToString() + "_" + MD5HashGenerator.GenerateKey(date);
                                } while (Directory.Exists((baseRFQAttachmentsPath + folderName)));
                                Directory.CreateDirectory((baseRFQAttachmentsPath + folderName));
                                rfq.SentAttachmentsFolder = folderName;
                            }
                            string currentPathAttachmentSource = baseBOMAttachmentsPath + bomAttachment.Directory + @"\" + bomAttachment.FileName;
                            string currentPathAttachmentTarget = baseRFQAttachmentsPath + rfq.SentAttachmentsFolder + @"\" + bomAttachment.FileName;
                            try
                            {
                                File.Copy(currentPathAttachmentSource, currentPathAttachmentTarget, true);
                            }
                            catch (Exception e)
                            {
                                response.ErrorThrown         = true;
                                response.ResponseDescription = "ERROR:" + e.Message;
                                return(JsonConvert.SerializeObject(response));
                            }
                        }


                        RfqCRUD rfqCRUD = new RfqCRUD();

                        rfq.SupplierId       = supplier.Id;
                        rfq.SupplierName     = supplier.SupplierName;
                        rfq.SentToVendor     = DateTime.Now;
                        rfq.LastEmail        = supplier.ContactEmail;
                        rfq.Status           = "PENDING";
                        rfq.BomDetailId      = component.Id;
                        rfq.Um               = component.Um;
                        rfq.RfqNumberKey     = rfqNumberGenereated.Id;
                        rfq.RfqGenerated     = rfqNumberGenereated.RfqGenerated;
                        rfq.DueDate          = newRFQScreen.DueDate;
                        rfq.MarketSectorID   = newRFQScreen.MarketSectorID;
                        rfq.DrawingLevel     = newRFQScreen.DrawingLevel;
                        rfq.TargetPrice      = newRFQScreen.TargetPrice;
                        rfq.CommentsToVendor = newRFQScreen.CommentsToVendor;


                        rfq.CreatedBy = strAuthUser;

                        string idGenerated = rfqCRUD.createAndReturnIdGenerated(rfq, component, ref DM);

                        if (!rfqCRUD.ErrorOccur)
                        {
                            rfq.Id = long.Parse(idGenerated);

                            foreach (RFQEAV eau in newEAUList)
                            {
                                RFQEAVCRUD rfqEAV_CRUD      = new RFQEAVCRUD();
                                RFQEAV     rfqEAV_toPersist = new RFQEAV();
                                rfqEAV_toPersist.RfqHeaderKey = long.Parse(idGenerated);
                                rfqEAV_toPersist.Volume       = eau.Volume * component.Qty;
                                rfqEAV_toPersist.Year         = eau.Year;
                                rfqEAV_toPersist.Status       = "CREATED";
                                rfqEAV_CRUD.createAndReturnIdGenerated(rfqEAV_toPersist, ref DM);
                                if (rfqEAV_CRUD.ErrorOccur)
                                {
                                    response.ErrorThrown         = true;
                                    response.ResponseDescription = "ERROR:" + rfqEAV_CRUD.ErrorMessage;
                                    return(JsonConvert.SerializeObject(response));
                                }
                            }

                            TokenCRUD token_CRUD = new TokenCRUD();
                            Token     token      = new Token();
                            token.Subject     = "RFQ";
                            token.SubjectKey  = long.Parse(idGenerated);
                            token.TokenNumber = MD5HashGenerator.GenerateKey(DateTime.Now);
                            if (token_CRUD.create(token, ref DM))
                            {
                                Email       NewMail = new Email();
                                MailMessage Message = new MailMessage();
                                try
                                {
                                    Message.From = new MailAddress("*****@*****.**", "*****@*****.**");
                                    Message.To.Add(new MailAddress(supplier.ContactEmail.ToString()));
                                    Message.Subject      = "Request For Quote";
                                    Message.IsBodyHtml   = true;
                                    Message.BodyEncoding = System.Text.Encoding.UTF8;

                                    var url             = ResolveUrl("~/Vendor/Email_RFQ_Request.htm");
                                    var strEmailContent = HTMLContent(url);
                                    strEmailContent = strEmailContent.Replace("{BuyerName}", user.Name);
                                    strEmailContent = strEmailContent.Replace("{BuyerPhone}", user.Phone1);
                                    strEmailContent = strEmailContent.Replace("{BuyerEmail}", user.Email);
                                    strEmailContent = strEmailContent.Replace("{RFQ Number}", rfqNumber.RfqGenerated);
                                    strEmailContent = strEmailContent.Replace("{Part Number}", component.PartNumber);
                                    strEmailContent = strEmailContent.Replace("{RFQLink}", "http://" + Request.Url.Authority + Request.ApplicationPath + "/Vendor/RFQHandler.ashx?token=" + token.TokenNumber);

                                    Message.Body = strEmailContent;


                                    NewMail.SendMail(Message);
                                }
                                catch (Exception ex)
                                {
                                    DM.RollBack();
                                    response.ErrorThrown         = true;
                                    response.ResponseDescription = "ERROR: Could not send email to: " + supplier.ContactEmail.ToString() + "; " + ex.Message;
                                    return(JsonConvert.SerializeObject(response));
                                }
                            }
                            else
                            {
                                response.ErrorThrown         = true;
                                response.ResponseDescription = "ERROR: " + token_CRUD.ErrorMessage;
                                return(JsonConvert.SerializeObject(response));
                            }
                        }
                        else
                        {
                            response.ErrorThrown         = true;
                            response.ResponseDescription = "ERROR: " + rfqCRUD.ErrorMessage;
                            return(JsonConvert.SerializeObject(response));
                        }
                    }

                    DM.CommitTransaction();
                    DM.Close_Open_Connection();

                    if (DM.ErrorOccur)
                    {
                        response.ErrorThrown         = true;
                        response.ResponseDescription = "ERROR: " + DM.Error_Mjs;
                        return(JsonConvert.SerializeObject(response));
                    }
                    resultRFQs.Add(rfq);
                }
            }
        }

        response.ErrorThrown         = false;
        response.ResponseDescription = "RFQs created successfully.";
        response.Result = resultRFQs;
        return(JsonConvert.SerializeObject(response));
    }
Example #3
0
        public void export()
        {
            summary.reset();

            sifAccessCRUD       sif_CRUD_Access     = new sifAccessCRUD();
            sifCRUD             sif_CRUD_APQM       = new sifCRUD();
            sifDetailCRUD       sifDetail_CRUD_APQM = new sifDetailCRUD();
            customerCRUD        customer_CRUD       = new customerCRUD();
            MarketSectorCRUD    marketSector_CRUD   = new MarketSectorCRUD();
            bomHeaderAccessCRUD bomHeaderAccess     = new bomHeaderAccessCRUD();
            bomAccessCRUD       bomAccessCRUD       = new bomAccessCRUD();
            bomCRUD             bomCRUD             = new bomCRUD();
            bomDetailCRUD       bomDetailCRUD       = new bomDetailCRUD();
            itemCRUD            item_CRUD           = new itemCRUD();

            List <SIF>          sifsInAPQM;
            List <Customer>     customersList;
            List <MarketSector> marketSectorList;
            List <Item>         itemList;

            int progress = 0;

            try
            {
                //sifsInAccess = (List<SIF>)sif_CRUD_Access.readActive();
                sifsInAPQM       = (List <SIF>)sif_CRUD_APQM.readAll();
                customersList    = (List <Customer>)customer_CRUD.readAll();
                marketSectorList = (List <MarketSector>)marketSector_CRUD.readAll();
                itemList         = (List <Item>)item_CRUD.readAll();
            }
            catch (Exception ex)
            {
                log = "ERROR: " + ex.Message + "\n\n";
                backgroundWorker1.ReportProgress(progress);
                System.Threading.Thread.Sleep(5);
                //txtLog.AppendText("ERROR: " + ex.Message + "\n");
                summary.totalErrors++;
                refreshSummary();
                return;
            }

            if (sifsInAccessToExport.Count > 0)
            {
                ConnectionManager CM = new ConnectionManager();
                Data_Base_MNG.SQL DM = CM.getDataManager();

                log = "INFO: Attempting to export " + sifsInAccessToExport.Count + " SIFs.\n\n\n";
                backgroundWorker1.ReportProgress(progress);
                System.Threading.Thread.Sleep(5);
                //txtLog.AppendText("INFO: Found " + sifsInAccessToExport.Count + " SIFs to import.\n");
                foreach (SIF sif in sifsInAccessToExport)
                {
                    //if (sif.InquiryNumber == "120629702")
                    //    MessageBox.Show("Here");

                    log = "INFO: Reading an active SIF: " + sif + "\n";
                    backgroundWorker1.ReportProgress(progress);
                    System.Threading.Thread.Sleep(5);
                    //txtLog.AppendText("INFO: Reading an active SIF: " + sif + "\n");
                    //Was this SIF imported before?:
                    if (sif_CRUD_APQM.readBySIF_IN_List(sif, sifsInAPQM) == null)
                    {
                        /*Begin Transaction*/
                        DM.Open_Connection("ImportingSIF");

                        //Persisting Customer ***********************************************************************************************************

                        Customer customer = customer_CRUD.readByNameInList(sif.CustomerName, customersList);
                        if (customer == null) //Customer does not exist
                        {
                            customer = new Customer();
                            customer.CustomerName = sif.CustomerName;
                            string idGenerated = customer_CRUD.createAndReturnIdGenerated(customer, ref DM);
                            if (idGenerated == "")
                            {
                                summary.totalErrors++;
                                log = "ERROR: Could not create Customer: " + customer.CustomerName + " for SIF with Inquiry Number: " + sif.InquiryNumber + "\n" +
                                      "Error Description: " + DM.Error_Mjs + "\n\n";
                                backgroundWorker1.ReportProgress(++progress);
                                System.Threading.Thread.Sleep(5);
                                continue;
                            }
                            else
                            {
                                customer.Id = long.Parse(idGenerated);
                                log         = "INFO: Customer created in APQM database: " + customer.CustomerName + "\n";
                                backgroundWorker1.ReportProgress(progress);
                                System.Threading.Thread.Sleep(5);
                                //txtLog.AppendText("INFO: Customer created in APQM database: " + customer.CustomerName + "\n");
                                customersList.Add(customer);
                            }
                        }
                        sif.CustomerKey = customer.Id;


                        //Persisting Market Sector ******************************************************************************************************

                        MarketSector marketSector = marketSector_CRUD.readByNameInList(sif.MarketSector, marketSectorList);
                        if (marketSector == null) //Market Sector does not exist
                        {
                            marketSector      = new MarketSector();
                            marketSector.Name = sif.MarketSector;
                            string idGenerated = marketSector_CRUD.createAndReturnIdGenerated(marketSector, ref DM);
                            if (idGenerated == "")
                            {
                                summary.totalErrors++;
                                log = "ERROR: Could not create Market Sector: " + marketSector.Name + " for SIF with Inquiry Number: " + sif.InquiryNumber + "\n" +
                                      "Error Description: " + DM.Error_Mjs + "\n\n";
                                backgroundWorker1.ReportProgress(++progress);
                                System.Threading.Thread.Sleep(5);
                                continue;
                            }
                            else
                            {
                                marketSector.Id = long.Parse(idGenerated);
                                log             = "INFO: Market Sector created in APQM database: " + marketSector.Name + "\n";
                                backgroundWorker1.ReportProgress(progress);
                                System.Threading.Thread.Sleep(5);
                                marketSectorList.Add(marketSector);
                            }
                        }
                        sif.MarketSectorID = marketSector.Id;


                        //Persisting SIF Header *********************************************************************************************************
                        log = "INFO: Attempting to export SIF: " + sif + "\n";
                        backgroundWorker1.ReportProgress(progress);
                        System.Threading.Thread.Sleep(5);
                        //txtLog.AppendText("INFO: Attempting to export SIF: " + sif + "\n");
                        string sifIDGenerated = sif_CRUD_APQM.createAndReturnIdGenerated(sif, ref DM);
                        if (sifIDGenerated == "")
                        {
                            summary.totalErrors++;
                            log = "ERROR: Could not export SIF: " + sif + "\n" +
                                  "Error Description: " + DM.Error_Mjs + "\n\n";
                            backgroundWorker1.ReportProgress(++progress);
                            System.Threading.Thread.Sleep(5);
                            continue;
                        }
                        else
                        {
                            sif.Id = long.Parse(sifIDGenerated);

                            //Persisting SIF Detail ****************************************************************************************************

                            if (sif.SifDetail.Count > 0)
                            {
                                log = "INFO: SIF exported, attempting to export its SIF Detail.\n";
                                backgroundWorker1.ReportProgress(progress);
                                System.Threading.Thread.Sleep(5);
                                if (!sifDetail_CRUD_APQM.saveSIFDetailInSIF(sif, ref DM))
                                {
                                    summary.totalErrors++;
                                    log = "ERROR: Could not export SIF Detail: " + sif.SifDetail + "\n" +
                                          "Error Description: " + DM.Error_Mjs + "\n\n";
                                    backgroundWorker1.ReportProgress(++progress);
                                    System.Threading.Thread.Sleep(5);
                                    continue;
                                }
                            }
                            else
                            {
                                log = "INFO: There are no SIF Detail items to export.\n";
                                backgroundWorker1.ReportProgress(progress);
                                System.Threading.Thread.Sleep(5);
                            }

                            log = "INFO: SIF Detail exported, reading its BOMHeader.\n";
                            backgroundWorker1.ReportProgress(progress);
                            System.Threading.Thread.Sleep(5);


                            //Persisting BOM Header *****************************************************************************************************

                            BOMHeaderAccess bomHeaderByActualSIF = bomHeaderAccess.readBySIF(sif);

                            if (bomHeaderByActualSIF != null)
                            {
                                BOM bomAPQM = new BOM();
                                bomAPQM.SifId = long.Parse(sifIDGenerated);
                                //bomAPQM.TopPartNumber = "";
                                bomAPQM.PartDescription = bomHeaderByActualSIF.PartDescription;
                                //bomAPQM.Revision = "";
                                log = "INFO: Attempting to export its BOMHeader: " + bomAPQM + "\n";
                                backgroundWorker1.ReportProgress(progress);
                                System.Threading.Thread.Sleep(5);
                                //txtLog.AppendText("INFO: Attempting to export its BOMHeader: " + bomAPQM + "\n");
                                string bomIDGenerated = bomCRUD.createAndReturnIdGenerated(bomAPQM, ref DM);

                                if (bomIDGenerated == "")
                                {
                                    summary.totalErrors++;
                                    log = "ERROR: Could not export BOMHeader: " + bomAPQM + "\n" +
                                          "Error Description: " + DM.Error_Mjs + "\n\n";
                                    backgroundWorker1.ReportProgress(++progress);
                                    System.Threading.Thread.Sleep(5);
                                    continue;
                                }
                                else
                                {
                                    log = "INFO: BOMHeader exported, reading Bom Lines.\n";
                                    backgroundWorker1.ReportProgress(progress);
                                    System.Threading.Thread.Sleep(5);



                                    //txtLog.AppendText("INFO: BOMHeader exported, reading Bom Lines.\n");
                                    List <BOMAccess> bomsByActualSIF = bomAccessCRUD.readBySIF(sif);
                                    if (bomsByActualSIF.Count > 0)
                                    {
                                        log = "INFO: Found: " + bomsByActualSIF.Count + " BOM lines, attempting to export its Item.\n";
                                        backgroundWorker1.ReportProgress(progress);
                                        System.Threading.Thread.Sleep(5);
                                        //txtLog.AppendText("INFO: Found: " + bomsByActualSIF.Count + " BOM lines, attempting to export its Item.\n");
                                        bool errorInBOM = false;
                                        foreach (BOMAccess bom in bomsByActualSIF)
                                        {
                                            if (bom.ImportComment != "")
                                            {
                                                summary.totalErrors++;
                                                log = "ERROR: " + " BOM: " + bom + "\n" +
                                                      "Error Description: " + bom.ImportComment + "\n\n";
                                                log += "INFO: Attempting to RollBack..\n";
                                                DM.RollBack();
                                                if (DM.ErrorOccur)
                                                {
                                                    log += "...Fail to RollBack.\n" + "Error Description: " + DM.Error_Mjs + "\n\n";
                                                }
                                                else
                                                {
                                                    log += "...RollBack done.\n\n";
                                                }

                                                backgroundWorker1.ReportProgress(++progress);
                                                System.Threading.Thread.Sleep(5);
                                                errorInBOM = true;

                                                break;
                                            }
                                            else
                                            {
                                                //Persisting Item Master *******************************************************************************
                                                //if (bom.PartNumber == "26-3706-c")
                                                //{
                                                //    MessageBox.Show("here");
                                                //}
                                                Item item = readByPartNumberInList(bom, itemList);
                                                if (item == null)
                                                {
                                                    item             = new Item();
                                                    item.PartNumber  = bom.PartNumber;
                                                    item.Description = bom.AssemblyDescription; //wont be used anymore
                                                    item.Cost        = bom.PartCost;
                                                    item.Um          = bom.Um;
                                                    item.Material    = bom.Material;
                                                    item.CommCode    = bom.CommCode;


                                                    string itemIDGenerated = item_CRUD.createAndReturnIdGenerated(item, ref DM);
                                                    if (itemIDGenerated == "")
                                                    {
                                                        summary.totalErrors++;
                                                        log = "ERROR: Could not export Item: " + item + "\n" +
                                                              "Error Description: " + DM.Error_Mjs + "\n\n";
                                                        backgroundWorker1.ReportProgress(++progress);
                                                        System.Threading.Thread.Sleep(5);
                                                        errorInBOM = true;
                                                        break;
                                                    }
                                                    else
                                                    {
                                                        item.Id = long.Parse(itemIDGenerated);
                                                        log     = "INFO: Item exported: " + item + "\n" + "Attempting to export its BOMLine\n";
                                                        backgroundWorker1.ReportProgress(progress);
                                                        System.Threading.Thread.Sleep(5);
                                                        itemList.Add(item);
                                                    }
                                                }
                                                else
                                                {
                                                    log = "INFO: Item already exists.\n";
                                                    backgroundWorker1.ReportProgress(progress);
                                                    System.Threading.Thread.Sleep(5);
                                                }


                                                //Persisting BOM Detail ********************************************************************************

                                                log = "INFO: Attempting to export its BOM Line\n";
                                                backgroundWorker1.ReportProgress(progress);
                                                System.Threading.Thread.Sleep(5);

                                                BOMDetail bomDetail = new BOMDetail();
                                                bomDetail.LinePosition   = bom.MaterialPosition;
                                                bomDetail.Material       = bom.Material;
                                                bomDetail.Description    = bom.AssemblyDescription; //Wont be used anymore
                                                bomDetail.SalesStatus    = bom.Status;
                                                bomDetail.Cost           = bom.PartCost;
                                                bomDetail.Qty            = bom.NoRequired;
                                                bomDetail.Um             = bom.Um;
                                                bomDetail.PartNumber     = bom.PartNumber;
                                                bomDetail.SalesComments  = bom.SalesComments; //wont be used anymore
                                                bomDetail.VendorQuoteEst = bom.VendorQuoteEst;
                                                bomDetail.CapComAssm     = bom.CapComAssm;
                                                bomDetail.CommCode       = bom.CommCode;
                                                bomDetail.Status         = "Imported";

                                                bomDetail.BomHeaderKey = long.Parse(bomIDGenerated);

                                                bomDetail.ItemMasterkey = item.Id;
                                                if (!bomDetailCRUD.create(bomDetail, ref DM))
                                                {
                                                    summary.totalErrors++;
                                                    log = "ERROR: Could not export BOM Line: " + bomDetail.PartNumber + ", " + bomDetail + " Error: " + DM.Error_Mjs + "\n\n";
                                                    backgroundWorker1.ReportProgress(++progress);
                                                    System.Threading.Thread.Sleep(5);
                                                    errorInBOM = true;
                                                    break;
                                                }
                                                else
                                                {
                                                    log = "INFO: BOM Line exported: " + bomDetail.PartNumber + ", " + bomDetail + "\n";
                                                    backgroundWorker1.ReportProgress(progress);
                                                    System.Threading.Thread.Sleep(5);
                                                    //txtLog.AppendText("INFO: BOM Line exported: " + bomDetail + "\n");
                                                }
                                            }
                                        }
                                        if (errorInBOM)
                                        {
                                            DM.Close_Open_Connection();
                                            continue;
                                        }
                                    }
                                    else
                                    {
                                        log = "INFO: No BOM Line found for SIF: " + sif + "\n";
                                        backgroundWorker1.ReportProgress(progress);
                                        System.Threading.Thread.Sleep(5);
                                        //txtLog.AppendText("INFO: No BOM Line found for SIF: " + sif + "\n");
                                    }
                                }
                            }
                            else
                            {
                                log = "INFO: No BOM Header found for SIF: " + sif + "\n";
                                backgroundWorker1.ReportProgress(progress);
                                System.Threading.Thread.Sleep(5);
                                //txtLog.AppendText("ERROR: Could not export BOM of SIF: " + sif + "\n");
                                //summary.totalErrors++;
                            }
                        }


                        /* End Transaction */
                        DM.CommitTransaction();
                        if (DM.ErrorOccur)
                        {
                            log = "ERROR: Could not commit transaction for SIF: " + sif + "\n";
                        }
                        else
                        {
                            log = "SUCCESS: SIF exported: " + sif + "\n";
                        }
                        DM.Close_Open_Connection();
                        backgroundWorker1.ReportProgress(progress);
                        System.Threading.Thread.Sleep(5);
                        //txtLog.AppendText("SUCCESS: SIF exported: " + sif + "\n");
                        summary.totalSuccess++;
                    }
                    else
                    {
                        log = "OMITTED: SIF already exported: " + sif + "\n";
                        backgroundWorker1.ReportProgress(progress);
                        System.Threading.Thread.Sleep(5);
                        //txtLog.AppendText("OMITTED: SIF already exported: " + sif + "\n");
                        summary.totalOmitted++;
                    }
                    log = "\n";
                    backgroundWorker1.ReportProgress(++progress);
                    System.Threading.Thread.Sleep(5);
                }
            }
            else
            {
                log = "INFO: No more SIF to export.\n\n";
                backgroundWorker1.ReportProgress(progress);
                System.Threading.Thread.Sleep(5);
                //txtLog.AppendText("INFO: No more SIF to export.\n\n");
            }
        }