private EmpContractDeclarantViewModel GetDeclarant(OBK_Declarant declarant, OBK_DeclarantContact declarantContact)
 {
     return(new EmpContractDeclarantViewModel
     {
         IsResident = declarant.IsResident,
         NameKz = declarant.NameKz,
         NameRu = declarant.NameRu,
         NameEn = declarant.NameEn,
         Countries = GetDictionaryList("Country", declarant.CountryId),
         Bin = declarant.Bin,
         OrganizationForms = GetDictionaryList("OpfType", declarant.OrganizationFormId),
         NonResidentsNames = GetNonResidentNameList(declarant.CountryId),
         BossLastName = declarantContact.BossLastName,
         BossFirstName = declarantContact.BossFirstName,
         BossMiddleName = declarantContact.BossMiddleName,
         BossPositionRu = declarantContact.BossPosition,
         BossPositionKz = declarantContact.BossPositionKz,
         AddressLegal = declarantContact.AddressLegalRu,
         AddressFact = declarantContact.AddressFact,
         Phone = declarantContact.Phone,
         Email = declarantContact.Email,
         BankName = declarantContact.BankNameRu,
         BankIik = declarantContact.BankIik,
         Currencies = GetDictionaryList("Currency", declarantContact.CurrencyId),
         BankBik = declarantContact.BankBik,
         Iin = declarant.Iin,
         BankAccount = declarantContact.BankAccount,
         IsHasBossDocNumber = declarantContact.IsHasBossDocNumber ? "Да" : "Нет",
         BossDocNumber = declarantContact.BossDocNumber,
         BossDocUnlimited = declarantContact.BossDocUnlimited ? "Да" : "Нет",
         BossDosCreateDate = declarantContact.BossDocCreatedDate != null?declarantContact.BossDocCreatedDate.Value.ToString("dd-MM-yyyy") : string.Empty,
                                 BossDocEndDate = declarantContact.BossDocEndDate != null?declarantContact.BossDocEndDate.Value.ToString("dd-MM-yyyy") : string.Empty
     });
 }
        private object GetDeclarantJson(OBK_Declarant organization)
        {
            if (organization != null)
            {
                var declarantContact = organization.OBK_DeclarantContact.OrderByDescending(x => x.CreateDate).FirstOrDefault();
                if (declarantContact != null)
                {
                    var declarantJson = new
                    {
                        organization.Id,
                        organization.OrganizationFormId,
                        organization.IsResident,
                        organization.NameKz,
                        organization.NameRu,
                        organization.NameEn,
                        organization.CountryId,

                        DeclarantContractId = declarantContact.Id,
                        declarantContact.AddressLegalRu,
                        declarantContact.AddressLegalKz,
                        declarantContact.AddressFact,
                        declarantContact.Phone,
                        declarantContact.Phone2,
                        declarantContact.Email,
                        declarantContact.BossLastName,
                        declarantContact.BossFirstName,
                        declarantContact.BossMiddleName,
                        declarantContact.BossPosition,
                        declarantContact.BossPositionKz,
                        declarantContact.BossDocType,
                        declarantContact.IsHasBossDocNumber,
                        declarantContact.BossDocNumber,
                        declarantContact.BossDocCreatedDate,
                        declarantContact.BossDocEndDate,
                        declarantContact.BossDocUnlimited,
                        declarantContact.SignerIsBoss,
                        declarantContact.SignLastName,
                        declarantContact.SignFirstName,
                        declarantContact.SignMiddleName,
                        declarantContact.SignPosition,
                        declarantContact.SignPositionKz,
                        declarantContact.SignDocType,
                        declarantContact.IsHasSignDocNumber,
                        declarantContact.SignDocNumber,
                        declarantContact.SignDocCreatedDate,
                        declarantContact.SignDocEndDate,
                        declarantContact.SignDocUnlimited,
                        declarantContact.BankIik,
                        declarantContact.BankBik,
                        declarantContact.CurrencyId,
                        declarantContact.BankNameRu,
                        declarantContact.BankNameKz,
                        declarantContact.BankAccount,
                        declarantContact.BankId
                    };
                    return(declarantJson);
                }
                else
                {
                    var declarantJson = new
                    {
                        organization.Id,
                        organization.OrganizationFormId,
                        organization.IsResident,
                        organization.NameKz,
                        organization.NameRu,
                        organization.NameEn,
                        organization.CountryId
                    };
                    return(declarantJson);
                }
            }
            return(null);
        }
        public OBK_Declarant ContractDeclarantSave(Guid guid, OBKDeclarantViewModel declarantViewModel, out bool declarantAlreadyExist)
        {
            declarantAlreadyExist = false;

            if (declarantViewModel.Id != null)
            {
                OBK_Declarant declarant = AppContext.OBK_Declarant.Where(x => x.Id == declarantViewModel.Id).FirstOrDefault();
                if (declarant != null && !declarant.IsConfirmed)
                {
                    declarant.OrganizationFormId = declarantViewModel.OrganizationFormId;
                    declarant.NameKz             = declarantViewModel.NameKz;
                    declarant.NameRu             = declarantViewModel.NameRu;
                    declarant.NameEn             = declarantViewModel.NameEn;
                    declarant.CountryId          = declarantViewModel.CountryId;
                    declarant.IsResident         = declarantViewModel.IsResident;
                    if (declarant.IsResident)
                    {
                        declarant.Bin = declarantViewModel.Bin;
                    }
                    else
                    {
                        declarant.Bin = null;
                    }

                    AppContext.SaveChanges();
                    return(declarant);
                }
            }
            else
            {
                if (declarantViewModel.IsResident)
                {
                    declarantAlreadyExist = DeclarantExist(declarantViewModel.Id, declarantViewModel.Bin);
                }
                else
                {
                    declarantAlreadyExist = DeclarantExist(declarantViewModel.Id, declarantViewModel.NameRu, declarantViewModel.CountryId);
                }

                if (!declarantAlreadyExist)
                {
                    var contract = AppContext.OBK_Contract.Where(x => x.Id == guid).FirstOrDefault();
                    if (contract != null)
                    {
                        if (contract.DeclarantId != null)
                        {
                            var existingDeclarant = AppContext.OBK_Declarant.Where(x => x.Id == contract.DeclarantId).FirstOrDefault();
                            if (!existingDeclarant.IsConfirmed)
                            {
                                AppContext.OBK_Declarant.Remove(existingDeclarant);
                                contract.DeclarantId = null;
                                AppContext.SaveChanges();
                            }
                        }

                        OBK_Declarant declarant = new OBK_Declarant();
                        declarant.Id                 = Guid.NewGuid();
                        declarant.IsConfirmed        = false;
                        declarant.OrganizationFormId = declarantViewModel.OrganizationFormId;
                        declarant.NameKz             = declarantViewModel.NameKz;
                        declarant.NameRu             = declarantViewModel.NameRu;
                        declarant.NameEn             = declarantViewModel.NameEn;
                        declarant.CountryId          = declarantViewModel.CountryId;
                        declarant.IsResident         = declarantViewModel.IsResident;
                        if (declarant.IsResident)
                        {
                            declarant.Bin = declarantViewModel.Bin;
                        }
                        else
                        {
                            declarant.Bin = null;
                        }
                        AppContext.OBK_Declarant.Add(declarant);
                        AppContext.SaveChanges();
                        contract.DeclarantId = declarant.Id;
                        var contact = AppContext.OBK_DeclarantContact.Where(x => x.Id == contract.DeclarantContactId).FirstOrDefault();
                        if (contact != null)
                        {
                            contact.DeclarantId = contract.DeclarantId;
                        }
                        AppContext.SaveChanges();
                        return(declarant);
                    }
                }
            }
            return(null);
        }