Example #1
0
        /// <summary>
        /// Clear through customs.
        /// </summary>
        /// <param name="commonClearanceData">The common clearance data.</param>
        /// <param name="warnings">The warnings.</param>
        /// <param name="requestedUrl">The requested URL.</param>
        void ICWAccountFactory.ClearThroughCustoms(CommonClearanceData commonClearanceData, List <Warnning> warnings, string requestedUrl)
        {
            WebsiteModelExtensions.TraceEvent("Starting CWAccountData.ICWAccountFactory.ClearThroughCustoms", 159, TraceSeverity.Verbose, WebsiteModelExtensions.LoggingCategories.CloseAccount);
            string _at = "Beginning";

            try
            {
                using (Entities _edc = new Entities(requestedUrl))
                {
                    _at = "ClearanceLookup";
                    Clearence _Clearance = Element.GetAtIndex <Clearence>(_edc.Clearence, commonClearanceData.ClearenceLookup);
                    _Clearance.FinishClearThroughCustoms(_edc, (message, eventId, severity) => WebsiteModelExtensions.TraceEvent(message, eventId, severity, WebsiteModelExtensions.LoggingCategories.CloseAccount));
                    WebsiteModelExtensions.TraceEvent("ICWAccountFactory.ClearThroughCustoms at SubmitChanges", 168, TraceSeverity.Verbose, WebsiteModelExtensions.LoggingCategories.CloseAccount);
                    _edc.SubmitChanges();
                }
            }
            catch (Exception ex)
            {
                string _msg = string.Format(Properties.Resources.UnexpectedExceptionMessage, "ICWAccountFactory.CreateCWAccount", _at, ex.Message);
                WebsiteModelExtensions.TraceEvent(_msg, 173, TraceSeverity.High, WebsiteModelExtensions.LoggingCategories.CloseAccount);
                Warnning _wrn = new Warnning(_msg, true);
                warnings.Add(_wrn);
            }
            WebsiteModelExtensions.TraceEvent("Finishing CWAccountData.ICWAccountFactory.ClearThroughCustoms", 179, TraceSeverity.Verbose, WebsiteModelExtensions.LoggingCategories.CloseAccount);
        }
Example #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AccountData" /> class.
 /// </summary>
 /// <param name="edc">The <see cref="Entities" /> object.</param>
 /// <param name="clearance">The clearance.</param>
 /// <param name="messageType">Type of the customs message.</param>
 /// <param name="warnings">The list of warnings.</param>
 /// <param name="trace">The trace.</param>
 public override void GetAccountData(Entities edc, Clearence clearance, Customs.Account.CommonAccountData.MessageType messageType, List <Warnning> warnings, NamedTraceLogger.TraceAction trace)
 {
     base.GetAccountData(edc, clearance, messageType, warnings, trace);
     Value     = clearance.Clearence2SadGoodID.TotalAmountInvoiced.GetValueOrDefault(0);
     UnitPrice = Value / NetMass;
     AnalizeDutyAndVAT(edc, clearance.Clearence2SadGoodID);
 }
        /// <summary>
        /// Clear through customs according 4071 procedure.
        /// </summary>
        /// <param name="entities">The entities.</param>
        /// <param name="good">The good.</param>
        /// <exception cref="InputDataValidationException">Create CW Account Failed;CreateCWAccount</exception>
        private static CWClearanceData CWPrepareClearance(Entities entities, SADGood good)
        {
            Clearence _clearance = GetClearanceIds(entities, good, Settings.GetParameter(entities, SettingsEntry.RequiredDocumentSADTemplateDocumentNamePattern)).First <Clearence>();

            _clearance.FinishClearingThroughCustoms(good);
            return(new CWClearanceData(_clearance.Id.Value));
        }
        /// <summary>
        /// Creates the IPR account.
        /// </summary>
        /// <param name="entities">The entities.</param>
        /// <param name="clearance">The clearance.</param>
        /// <param name="messageType">Type of the _message.</param>
        /// <param name="comments">The _comments.</param>
        /// <param name="warnings">The list of warnings.</param>
        /// <param name="trace">The trace action.</param>
        private static void CreateIPRAccount(Entities entities, Clearence clearance, CustomsDocument.DocumentType messageType, out string comments, List <Warnning> warnings, NamedTraceLogger.TraceAction trace)
        {
            trace("Entering ClearenceHelpers.CreateIPRAccount", 169, TraceSeverity.Verbose);
            comments = "IPR account creation error";
            string          _referenceNumber = String.Empty;
            SADDocumentType declaration      = clearance.Clearence2SadGoodID.SADDocumentIndex;

            _referenceNumber = declaration.ReferenceNumber;
            if (WebsiteModel.Linq.IPR.RecordExist(entities, clearance.DocumentNo))
            {
                string _msg = "IPR record with the same SAD document number: {0} exist";
                _msg = String.Format(_msg, clearance.DocumentNo);
                trace("Exception at ClearenceHelpers.CreateIPRAccount: " + _msg, 199, TraceSeverity.Verbose);
                throw GenericStateMachineEngine.ActionResult.NotValidated(_msg);
            }
            comments = "Inconsistent or incomplete data to create IPR account";
            IPRAccountData _iprdata = new IPRAccountData(clearance.Id.Value);

            _iprdata.GetAccountData(entities, clearance, ImportXMLCommon.Convert2MessageType(messageType), warnings, trace);
            comments = "Consent lookup filed";
            IPRClass _ipr = new IPRClass(entities, _iprdata, clearance, declaration);

            entities.IPR.InsertOnSubmit(_ipr);
            clearance.SPStatus = true;
            trace("ClearenceHelpers.CreateIPRAccount at SubmitChanges", 209, TraceSeverity.Verbose);
            entities.SubmitChanges();
            _ipr.UpdateTitle();
            comments = "IPR account created";
            trace("ClearenceHelpers.Create - IPRAccount comments", 213, TraceSeverity.Verbose);
        }
 private void onCreateMessageTemplates(object sender, EventArgs e)
 {
     TraceEvent("Entering ClearThroughCustoms.onCreateMessageTemplates", 46, TraceSeverity.Monitorable);
     try
     {
         string _MasterDocumentName = String.Empty;
         using (Entities _entities = new Entities(workflowProperties.WebUrl))
         {
             DisposalRequestLib _Dr = Element.GetAtIndex <DisposalRequestLib>(_entities.DisposalRequestLibrary, workflowProperties.ItemId);
             foreach (CustomsWarehouseDisposal _cwdx in _Dr.CustomsWarehouseDisposal(_entities, false))
             {
                 if (_cwdx.CustomsStatus.Value != CustomsStatus.NotStarted)
                 {
                     continue;
                 }
                 Clearence _newClearance = Clearence.CreataClearence(_entities, "Customs Warehouse Withdraw", _Dr.ClearenceProcedure.Value, TraceEvent);
                 _cwdx.CWL_CWDisposal2ClearanceID = _newClearance;
                 _cwdx.CustomsStatus = CustomsStatus.Started;
                 if (_cwdx.CWL_CWDisposal2CustomsWarehouseID.TobaccoNotAllocated.Value > 0 ||
                     _cwdx.CWL_CWDisposal2CustomsWarehouseID.CustomsWarehouseDisposal(_entities, false).Where <CustomsWarehouseDisposal>(x => x.CustomsStatus.Value == CustomsStatus.NotStarted).Any <CustomsWarehouseDisposal>())
                 {
                     _cwdx.ClearingType = ClearingType.PartialWindingUp;
                 }
                 else
                 {
                     _cwdx.ClearingType         = ClearingType.TotalWindingUp;
                     _cwdx.TobaccoValue        += _cwdx.CWL_CWDisposal2CustomsWarehouseID.Value.Value - _cwdx.CWL_CWDisposal2CustomsWarehouseID.CustomsWarehouseDisposal(_entities, false).Sum <CustomsWarehouseDisposal>(x => x.TobaccoValue.Value);
                     _cwdx.TobaccoValue         = _cwdx.TobaccoValue.Value.RoundValue();
                     _cwdx.CW_SettledNetMass   += _cwdx.CWL_CWDisposal2CustomsWarehouseID.CW_Quantity.Value - _cwdx.CWL_CWDisposal2CustomsWarehouseID.CustomsWarehouseDisposal(_entities, false).Sum <CustomsWarehouseDisposal>(x => x.CW_SettledNetMass.Value);
                     _cwdx.CW_SettledNetMass    = _cwdx.CW_SettledNetMass.Value.RoundValue();
                     _cwdx.CW_SettledGrossMass += _cwdx.CWL_CWDisposal2CustomsWarehouseID.GrossMass.Value - _cwdx.CWL_CWDisposal2CustomsWarehouseID.CustomsWarehouseDisposal(_entities, false).Sum <CustomsWarehouseDisposal>(x => x.CW_SettledGrossMass.Value);
                     _cwdx.CW_SettledGrossMass  = _cwdx.CW_SettledGrossMass.Value.RoundValue();
                 }
                 _MasterDocumentName = _newClearance.SADTemplateDocumentNameFileName(_entities);
                 SAD _sad = CraeteSAD(_entities, _cwdx, _MasterDocumentName);
                 TraceEvent(" ClearThroughCustoms.onCreateMessageTemplates at File.CreateXmlFile", 4756, TraceSeverity.Monitorable);
                 SPFile         _newFile        = File.CreateXmlFile <SAD>(workflowProperties.Web, _sad, _MasterDocumentName, SADConsignment.IPRSADConsignmentLibraryTitle, SAD.StylesheetNmane);
                 SADConsignment _sadConsignment = Element.GetAtIndex <SADConsignment>(_entities.SADConsignment, _newFile.Item.ID);
                 _sadConsignment.Archival = true;
                 _newClearance.SADConsignmentLibraryIndex = _sadConsignment;
                 TraceEvent(" ClearThroughCustoms.onCreateMessageTemplates at SubmitChanges", 80, TraceSeverity.Monitorable);
                 _entities.SubmitChanges();
             }
         }
         logToHistoryListActivity_HistoryOutcome     = "Success";
         logToHistoryListActivity_HistoryDescription = String.Format("Document {0} created successfully", _MasterDocumentName);
     }
     catch (Exception _ex)
     {
         logToHistoryListActivity_HistoryOutcome     = "Exception";
         logToHistoryListActivity_HistoryDescription = _ex.Message;
         TraceEvent(String.Format("Exception {0} at ClearThroughCustoms.onCreateMessageTemplates: {1}; StackTrace: {2}", _ex.GetType().Name, _ex.Message, _ex.StackTrace), 46, TraceSeverity.High);
     }
     TraceEvent("Finishing ClearThroughCustoms.onCreateMessageTemplates", 98, TraceSeverity.Monitorable);
 }
        private static void CLNEProcessing(string webUrl, int sadDocumentTypeId, ref string comments, List <Warnning> warnings, NamedTraceLogger.TraceAction trace)
        {
            trace("Entering ClearenceHelpers.CLNEProcessing", 71, TraceSeverity.Verbose);
            List <CWAccountData> _tasksList = new List <CWAccountData>();

            using (Entities _entities = new Entities(webUrl))
            {
                SADDocumentType        _sad    = Element.GetAtIndex <SADDocumentType>(_entities.SADDocument, sadDocumentTypeId);
                IQueryable <Clearence> _clrncs = Clearence.GetClearence(_entities, _sad.ReferenceNumber);
                if ((from _cx in _clrncs where _cx.Clearence2SadGoodID == null select _cx).Any <Clearence>())
                {
                    string _error = String.Format("SAD with reference number: {0} must be imported first", _sad.ReferenceNumber);
                    throw new InputDataValidationException("CLNE message cannot be processed before SAD", "DeclarationProcessing", _error, true);
                }
                foreach (Clearence _cx in _clrncs)
                {
                    _cx.DocumentNo = _sad.DocumentNumber;
                    switch (_cx.ClearenceProcedure.Value.RequestedProcedure())
                    {
                    case CustomsProcedureCodes.FreeCirculation:
                        _cx.FinishClearingThroughCustoms(_entities, trace);
                        break;

                    case CustomsProcedureCodes.InwardProcessing:
                        CreateIPRAccount(_entities, _cx, CustomsDocument.DocumentType.SAD, out comments, warnings, trace);
                        break;

                    case CustomsProcedureCodes.CustomsWarehousingProcedure:
                        throw new NotImplementedException("CLNEProcessing - CustomsWarehousingProcedure"); //TODO http://casas:11227/sites/awt/Lists/RequirementsList/_cts/Requirements/displayifs.aspx?List=e1cf335a

                    //comments = "CW account creation error";
                    //CWAccountData _accountData = new CWAccountData(_cx.Id.Value);
                    //_accountData.GetAccountData(_entities, _cx, ImportXMLCommon.Convert2MessageType(CustomsDocument.DocumentType.SAD), progressChange);
                    //CreateCWAccount(_accountData, webUrl, out comments);
                    //break;
                    case CustomsProcedureCodes.ReExport:
                    case CustomsProcedureCodes.NoProcedure:
                    default:
                        throw new IPRDataConsistencyException("CLNEProcessing", "Unexpected procedure code for CLNE message", null, c_wrongProcedure);
                    }
                }
                _entities.SubmitChanges();
            }
            trace("ClearenceHelpers.CLNEProcessing at CreateCWAccount", 109, TraceSeverity.Verbose);
            foreach (CWAccountData _accountData in _tasksList)
            {
                CreateCWAccount(_accountData, webUrl, out comments);
            }
        }
Example #7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AccountData" /> class.
        /// </summary>
        /// <param name="edc">The <see cref="Entities" /> object.</param>
        /// <param name="clearance">The clearance.</param>
        /// <param name="messageType">Type of the customs message.</param>
        /// <param name="warnings">The list of warnings.</param>
        /// <param name="trace">The trace.</param>
        public virtual void GetAccountData(Entities edc, Clearence clearance, MessageType messageType, List <Warnning> warnings, NamedTraceLogger.TraceAction trace)
        {
            trace("Entering AccountData.GetAccountData", 50, TraceSeverity.Verbose);
            DocumentNo = clearance.DocumentNo;
            DateTime _customsDebtDate = clearance.Clearence2SadGoodID.SADDocumentIndex.CustomsDebtDate.Value;

            this.CustomsDebtDate = _customsDebtDate;
            AnalizeGood(edc, clearance.Clearence2SadGoodID, messageType);
            IEnumerable <SADRequiredDocuments> _rdoc = clearance.Clearence2SadGoodID.SADRequiredDocuments(edc);

            this.Invoice = (from _dx in _rdoc
                            let CustomsProcedureCode = _dx.Code.ToUpper()
                                                       where CustomsProcedureCode.Contains("N380") || CustomsProcedureCode.Contains("N935")
                                                       select new { Number = _dx.Number }
                            ).First().Number;
            FindConsentRecord(edc, _rdoc, _customsDebtDate, warnings, trace);
            AnalyzeGoodsDescription(edc, clearance.Clearence2SadGoodID.GoodsDescription); //TODO to IPR
            PCNTariffCodeLookup = PCNCode.AddOrGet(edc, clearance.Clearence2SadGoodID.PCNTariffCode, TobaccoName).Id.Value;
        }
        private static List <Clearence> GetClearanceIds(Entities entities, SADGood good, string pattern)
        {
            List <Clearence> _ret = new List <Clearence>();

            foreach (SADRequiredDocuments _rdx in good.SADRequiredDocuments(entities))
            {
                if (_rdx.Code != XMLResources.RequiredDocumentConsignmentCode)
                {
                    continue;
                }
                int?_cleranceInt = XMLResources.GetRequiredDocumentFinishedGoodExportConsignmentNumber(_rdx.Number, pattern);
                if (!_cleranceInt.HasValue)
                {
                    continue;
                }
                if (_cleranceInt.HasValue)
                {
                    Clearence _clearance = Element.GetAtIndex <Clearence>(entities.Clearence, _cleranceInt.Value);
                    _ret.Add(_clearance);
                }
                else
                {
                    string _template = "Cannot find clearance for the required document code={0} for customs document = {1}/ref={2}";
                    throw new InputDataValidationException(
                              String.Format(_template, _rdx.Number, good.SADDocumentIndex.DocumentNumber, good.SADDocumentIndex.ReferenceNumber),
                              "SAD Required Documents",
                              "clear through customs fatal error", true);
                }
            }// foreach
            if (_ret.Count == 0)
            {
                string _template = "Cannot find required document code={0} for customs document = {1}/ref={2}";
                throw new InputDataValidationException(
                          String.Format(_template, XMLResources.RequiredDocumentConsignmentCode, good.SADDocumentIndex.DocumentNumber, good.SADDocumentIndex.ReferenceNumber),
                          "SAD Required Documents",
                          "clear through customs fatal error", true);
            }
            return(_ret);
        }
        private GenericStateMachineEngine.ActionResult Export()
        {
            TraceEvent("Entering ExportWebPartUserControl.Export", 578, TraceSeverity.Monitorable);
            foreach (InvoiceContent item in m_ControlState.Invoice.InvoiceContent(m_DataContextManagement.DataContext))
            {
                //TODO ExportIsPossible - improve for many invoice content with the same FG batch groups by batch must be checked against possible export
                string _checkResult = item.ExportIsPossible(m_DataContextManagement.DataContext, item.Quantity);
                if (_checkResult.IsNullOrEmpty())
                {
                    TraceEvent(String.Format("Checked Item {0}", item.Title), 585, TraceSeverity.Verbose);
                    continue;
                }
                Controls.Add(ControlExtensions.CreateMessage(_checkResult));
                m_ControlState.InvoiceContent = item;
                string _ms = "CannotProceedWithExportBecauseTheInvoiceItemContainsErrors".GetLocalizedString();
                _ms = String.Format(_ms, item.Title);
                TraceEvent(_ms, 592, TraceSeverity.Verbose);
                return(GenericStateMachineEngine.ActionResult.NotValidated(_ms));
            }
            m_ControlState.Invoice.InvoiceLibraryStatus = true;
            Clearence _newClearance       = Clearence.CreateClearance(m_DataContextManagement.DataContext, "FinishedGoodsExport", ClearenceProcedure._3151, (x, y, z) => TraceEvent(x, y, z));
            string    _masterDocumentName = _newClearance.FinishedGoodsExportFormFileName(m_DataContextManagement.DataContext);

            TraceEvent(String.Format("ExportWebPartUserControl.Export - generated document name: {0}", _masterDocumentName), 578, TraceSeverity.Verbose);
            CigaretteExportFormCollection _cefc = FinishedGoodsFormFactory.GetFormContent
                                                      (m_DataContextManagement.DataContext, m_ControlState.Invoice, _newClearance, _masterDocumentName, _newClearance.SADDocumentNumber, (x, y, z) => TraceEvent(x, y, z));

            TraceEvent(String.Format("ExportWebPartUserControl.Export - at SPDocumentFactory.Prepare", _masterDocumentName), 578, TraceSeverity.Verbose);
            int            _sadConsignmentIdentifier = SPDocumentFactory.Prepare(SPContext.Current.Web, _cefc, _masterDocumentName, (x, y, z) => TraceEvent(x, y, z));
            SADConsignment _sadConsignment           = Element.GetAtIndex <SADConsignment>(m_DataContextManagement.DataContext.SADConsignment, _sadConsignmentIdentifier);

            _newClearance.SADConsignmentLibraryIndex = _sadConsignment;
            TraceEvent("ExportWebPartUserControl.Export at SubmitChanges", 605, TraceSeverity.Verbose);
            m_DataContextManagement.DataContext.SubmitChanges();
            TraceEvent("Finished ExportWebPartUserControl.Export", 607, TraceSeverity.Verbose);
            return(GenericStateMachineEngine.ActionResult.Success);
        }
 private void Create(NamedTraceLogger.TraceAction trace)
 {
     CurrentClearance = Clearence.CreateClearance(m_DataContextManagement.DataContext, m_SelectGroupRadioButtonList.SelectedValue, SelectedClearenceProcedure, trace);
     Update();
     Response.Redirect(Request.RawUrl);
 }
        private static void SADPZCProcessing(string webUrl, CustomsDocument.DocumentType messageType, int sadDocumentTypeId, ref string comments, List <Warnning> warnings, NamedTraceLogger.TraceAction trace)
        {
            trace("Entering ClearenceHelpers.SADPZCProcessing", 71, TraceSeverity.Verbose);
            List <CommonClearanceData> _tasksList = new List <CommonClearanceData>();

            using (Entities entities = new Entities(webUrl))
            {
                SADDocumentType sad = Element.GetAtIndex <SADDocumentType>(entities.SADDocument, sadDocumentTypeId);
                foreach (SADGood _sgx in sad.SADGood(entities))
                {
                    switch (_sgx.SPProcedure.RequestedProcedure())
                    {
                    case CustomsProcedureCodes.FreeCirculation:
                        if (messageType == CustomsDocument.DocumentType.SAD)
                        {
                            comments = "Document added";
                            continue;
                        }
                        if (_sgx.SPProcedure.PreviousProcedure() == CustomsProcedureCodes.CustomsWarehousingProcedure)
                        {
                            _tasksList.Add(CWPrepareClearance(entities, _sgx)); //Procedure 4071
                        }
                        else if (_sgx.SPProcedure.PreviousProcedure() == CustomsProcedureCodes.InwardProcessing)
                        {
                            IPRClearThroughCustoms(entities, _sgx, trace); //Procedure 4051
                        }
                        else
                        {
                            string _msg = string.Format("Unexpected previous procedure code {1} for the {0} message", messageType, _sgx.SPProcedure.PreviousProcedure());
                            trace("IPRDataConsistencyException at ClearenceHelpers.SADPZCProcessing: ", 140, TraceSeverity.Verbose);
                            throw new IPRDataConsistencyException("SADPZCProcessing.FreeCirculation", _msg, null, c_wrongProcedure);
                        }
                        break;

                    case CustomsProcedureCodes.InwardProcessing:
                    {
                        if (messageType == CustomsDocument.DocumentType.SAD)
                        {
                            comments = "Document added";
                            continue;
                        }
                        if (_sgx.SPProcedure.PreviousProcedure() == CustomsProcedureCodes.CustomsWarehousingProcedure)
                        {
                            _tasksList.Add(CWPrepareClearance(entities, _sgx)); //Procedure 5171
                        }
                        // Procedure 5100 or 5171
                        Clearence _newClearance = Clearence.CreataClearance(entities, "InwardProcessing", ClearenceProcedure._5171, _sgx);
                        CreateIPRAccount(entities, _newClearance, CustomsDocument.DocumentType.PZC, out comments, warnings, trace);
                        break;
                    }

                    case CustomsProcedureCodes.CustomsWarehousingProcedure:
                        Clearence _newWarehousinClearance = Clearence.CreataClearance(entities, "CustomsWarehousingProcedure", ClearenceProcedure._7100, _sgx);
                        if (messageType == CustomsDocument.DocumentType.PZC)
                        {
                            comments = "CW account creation error";
                            CWAccountData _accountData = new CWAccountData(_newWarehousinClearance.Id.Value);
                            _accountData.GetAccountData(entities, _newWarehousinClearance, ImportXMLCommon.Convert2MessageType(CustomsDocument.DocumentType.SAD), warnings, trace);
                            _tasksList.Add(_accountData);
                        }
                        else
                        {
                            comments = "Document added";
                        }
                        break;

                    case CustomsProcedureCodes.NoProcedure:
                    case CustomsProcedureCodes.ReExport:
                    default:
                        throw new IPRDataConsistencyException("SADPZCProcessing.RequestedProcedure", string.Format("Unexpected procedure code for the {0} message", messageType), null, c_wrongProcedure);
                    } //switch ( _sgx.Procedure.RequestedProcedure() )
                }     //foreach ( SADGood _sgx in sad.SADGood )
                entities.SubmitChanges();
            }         //using ( Entities entities
            foreach (CommonClearanceData _accountData in _tasksList)
            {
                if (_accountData is CWAccountData)
                {
                    CreateCWAccount((CWAccountData)_accountData, webUrl, out comments);
                }
                else if (_accountData is CWClearanceData)
                {
                    CWClearThroughCustoms((CWClearanceData)_accountData, webUrl, out comments);
                }
            }
        }
        internal static CigaretteExportFormCollection GetFormContent(Entities entities, InvoiceLib invoice, Clearence clearance, string documentName, int sadConsignmentNumber, NamedTraceLogger.TraceAction trace)
        {
            trace("Entering FinishedGoodsFormFactory.GetFormContent", 40, TraceSeverity.Verbose);
            int _position = 1;
            List <CigaretteExportForm> _consignment = new List <CigaretteExportForm>();

            invoice.ClearenceIndex         = clearance;
            invoice.InvoiceLibraryReadOnly = true;
            foreach (InvoiceContent item in invoice.InvoiceContent(entities))
            {
                ExportInvoiceEntry(entities, item, _consignment, documentName, ref _position, sadConsignmentNumber, trace);
            }
            trace("FinishedGoodsFormFactory.GetFormContent - finished processing invoice items", 40, TraceSeverity.Verbose);
            return(GetCigaretteExportFormCollection(_consignment, documentName, invoice.BillDoc));
        }