public void SaveCompleteSubmission(
            List <dtoSubmissionValueField> fields,
            lm.Comol.Core.MailCommons.Domain.Configurations.SmtpServiceConfig smtpConfig,
            String websiteUrl,
            Dictionary <SubmissionTranslations, string> translations,
            String BaseFilePath,
            String translationFileName,
            DateTime clickDt)
        {
            long           idSubmission = this.View.IdSubmission;
            long           idCall       = View.IdCall;
            UserSubmission submission   = Service.GetUserSubmission(View.IdSubmission);

            if (submission == null || submission.AllowEditSubmission(View.InitSubmissionTime, clickDt))
            {
                submission = SaveUserSubmission(fields);
                Revision revision = Service.GetRevision(View.IdRevision);
                if ((submission != null || submission.AllowEditSubmission(View.InitSubmissionTime, clickDt)) && revision != null)
                {
                    idSubmission = submission.Id;
                    //View.IdSubmission = idSubmission;
                    View.TryToComplete = true;
                    try
                    {
                        Int32      idUser = UserContext.CurrentUserID;
                        litePerson person = GetCurrentUser(ref idUser);
                        if (submission.Owner.Id == idUser)
                        {
                            if (fields.Any(f => f.Field.Type == FieldType.FileInput && (f.Value == null || f.Value.IdLink == 0)))
                            {
                                List <SubmissionFieldFileValue> fValues = (from f in CurrentManager.GetIQ <SubmissionFieldFileValue>()
                                                                           where f.Submission == submission && f.Deleted == BaseStatusDeleted.None && f.Revision.Id == revision.Id
                                                                           select f).ToList();
                                if (fValues.Any())
                                {
                                    foreach (dtoSubmissionValueField field in fields.Where(f => f.Field.Type == FieldType.FileInput && (f.Value == null || f.Value.IdLink == 0)))
                                    {
                                        field.Value.IdLink = fValues.Where(f => f.Field.Id == field.IdField).Select(f => f.Link.Id).FirstOrDefault();
                                    }
                                }
                            }



                            bool needSignature = Service.NeedSignature(idCall);


                            if (needSignature)
                            {
                                Service.UserLockSubmission(submission, revision, View.InitSubmissionTime, idUser, BaseFilePath, fields, smtpConfig, websiteUrl, translations, translationFileName, clickDt);
                            }
                            else
                            {
                                //Service.UserCompleteSubmission(submission, revision, View.InitSubmissionTime, idUser, baseFilePath, fields, smtpConfig, websiteUrl, translations, translationZIPFileName, clickDt);
                                Service.UserCompleteSubmission(submission, revision, View.InitSubmissionTime, idUser, BaseFilePath, fields, smtpConfig, websiteUrl, translations, translationFileName, clickDt);
                            }



                            //Service.UserCompleteSubmission(submission, revision, View.InitSubmissionTime, idUser, BaseFilePath, fields, smtpConfig, websiteUrl, translations, translationFileName, clickDt);
                            View.AllowCompleteSubmission = false;
                            View.AllowDeleteSubmission   = false;
                            View.AllowSave = false;
                            View.SendUserAction(View.IdCallCommunity, View.IdCallModule, submission.Id, ModuleCallForPaper.ActionType.ConfirmSubmission);



                            if (needSignature)
                            {
                                View.GoToUrl(
                                    RootObject.ContinueSubmission(CallForPaperType.CallForBids, idCall, Service.CallIsPublic(idCall), idSubmission,
                                                                  View.FromPublicList, CallStatusForSubmitters.Draft, View.PreloadIdOtherCommunity)
                                    );

                                //(CallForPaperType.CallForBids, idCall, idSubmission,
                                //    View.FromPublicList, CallStatusForSubmitters.Draft, View.PreloadIdOtherCommunity)
                                //);
                            }
                            else
                            {
                                View.GoToUrl(RootObject.FinalMessage(CallForPaperType.CallForBids, idCall, idSubmission, View.IdRevision, submission.UserCode, View.isAnonymousSubmission, View.FromPublicList, CallStatusForSubmitters.Submitted, View.PreloadIdOtherCommunity));
                            }



                            //View.GoToUrl(RootObject.FinalMessage(CallForPaperType.CallForBids, idCall, idSubmission, View.IdRevision, submission.UserCode, View.isAnonymousSubmission, View.FromPublicList, CallStatusForSubmitters.Submitted, View.PreloadIdOtherCommunity));
                        }
                        else if (!View.isAnonymousSubmission && UserContext.isAnonymous)
                        {
                            View.DisplayCallUnavailableForPublic();
                        }
                        else
                        {
                            View.DisplaySessionTimeout();
                        }
                    }
                    catch (SubmissionStatusChange ex)
                    {
                        View.AllowDeleteSubmission = (submission != null && submission.Deleted == BaseStatusDeleted.None && submission.Status == SubmissionStatus.draft);
                        View.LoadError(SubmissionErrorView.SubmissionValueSaving, View.IdCallCommunity, idCall, CallStatusForSubmitters.SubmissionOpened);
                    }
                    catch (SubmissionItemsEmpty ex)
                    {
                        Dictionary <long, FieldError>  errors      = Service.GetSubmissionFieldErrors(submission, revision);
                        List <dtoSubmissionValueField> errorFields = fields.Where(f => !errors.ContainsKey(f.IdField) && f.FieldError != FieldError.None).ToList();
                        errorFields.ForEach(e => errors.Add(e.IdField, e.FieldError));
                        View.AllowDeleteSubmission = (submission != null && submission.Deleted == BaseStatusDeleted.None && submission.Status == SubmissionStatus.draft);
                        View.LoadError((errors.ToList().Where(er => er.Value != FieldError.Mandatory).Any()) ? SubmissionErrorView.InvalidFields : SubmissionErrorView.RequiredItems, View.IdCallCommunity, idCall, CallStatusForSubmitters.SubmissionOpened);
                        LoadSections(submission.Call, submission.Type.Id, idSubmission, View.IdRevision, errors, Service.GetSubmissionRequiredFileErrors(submission));
                    }
                    catch (SubmissionTimeExpired ex)
                    {
                        View.LoadError(SubmissionErrorView.SubmissionValueSaving, View.IdCallCommunity, idCall, CallStatusForSubmitters.SubmissionClosed);
                    }
                    //View.InitSubmissionTime = DateTime.Now;
                }
            }
            else if (submission != null)
            {
                View.GoToUrl(CallStandardAction.None, RootObject.ViewSubmission(CallForPaperType.CallForBids, idCall, idSubmission, View.FromPublicList, CallStatusForSubmitters.Submitted, View.PreloadIdOtherCommunity, 0));
            }
            else
            {
                View.GoToUrl(CallStandardAction.List, RootObject.ViewCalls(idCall, CallForPaperType.CallForBids, CallStandardAction.List, View.IdCallCommunity, CallStatusForSubmitters.SubmissionClosed));
            }
        }