public async Task DongDau(VanThuXuLy99InputDto input)
        {
            var vanThuId = _session.UserId;

            try
            {
                var hoSo = await _hoSoRepos.FirstOrDefaultAsync(x => x.Id == input.HoSoId);

                var hosoxl = await _hoSoXuLyRepos.FirstOrDefaultAsync(input.HoSoXuLyId);

                if (hosoxl != null && hoSo != null && hosoxl.Id > 0)
                {
                    if (hosoxl.HoSoIsDat == true)
                    {
                        hoSo.TrangThaiHoSo = (int)CommonENum.TRANG_THAI_HO_SO.DA_HOAN_TAT;
                        hoSo.NgayTraKetQua = DateTime.Now;
                    }
                    else
                    {
                        hoSo.TrangThaiHoSo = (int)CommonENum.TRANG_THAI_HO_SO.SUA_DOI_BO_SUNG;
                        hoSo.IsHoSoBS      = true;
                    }

                    hosoxl.DonViXuLy     = (int)CommonENum.DON_VI_XU_LY.DOANH_NGHIEP;
                    hosoxl.DonViGui      = (int)CommonENum.DON_VI_XU_LY.VAN_THU;
                    hosoxl.NguoiGuiId    = _session.UserId;
                    hosoxl.NguoiXuLyId   = hoSo.CreatorUserId;
                    hosoxl.NgayGui       = DateTime.Now;
                    hosoxl.VanThuDaDuyet = true;

                    hosoxl.VanThuId          = vanThuId;
                    hosoxl.VanThuIsCA        = true;
                    hosoxl.VanThuNgayDongDau = DateTime.Now;
                    hosoxl.DuongDanTepCA     = input.DuongDanTepCA;
                    hosoxl.GiayTiepNhanCA    = input.GiayTiepNhanCA;
                    if (hosoxl.HoSoIsDat == true)
                    {
                        hoSo.GiayTiepNhan     = input.GiayTiepNhanCA;
                        hoSo.GiayTiepNhanFull = input.GiayTiepNhanCA;
                    }
                    else
                    {
                        hoSo.GiayTiepNhan     = null;
                        hoSo.GiayTiepNhanFull = null;
                    }
                    hosoxl.YKienGui = null;


                    await _hoSoRepos.UpdateAsync(hoSo);

                    await _hoSoXuLyRepos.UpdateAsync(hosoxl);

                    if (hosoxl.HoSoIsDat != true)
                    {
                        #region HoSo_Clone

                        var hoSoClone = new XHoSoDto();
                        hoSo.MapTo(hoSoClone);
                        hoSoClone.PId = hoSo.PId != null ? hoSo.PId : hoSo.Id;
                        var insertInput = hoSoClone.MapTo <XHoSo>();

                        long idClone = await _hoSoRepos.InsertAndGetIdAsync(insertInput);

                        CurrentUnitOfWork.SaveChanges();
                        var teps = _hoSoTepDinhKemRepos.GetAll()
                                   .Where(x => x.HoSoId == input.HoSoId);

                        foreach (var tep in teps)
                        {
                            var tepNew = new XHoSoTepDinhKem
                            {
                                HoSoId         = insertInput.Id,
                                IsActive       = tep.IsActive,
                                DuongDanTep    = tep.DuongDanTep,
                                IsCA           = tep.IsCA,
                                DaTaiLen       = tep.DaTaiLen,
                                LoaiTepDinhKem = tep.LoaiTepDinhKem,
                                MoTaTep        = tep.MoTaTep,
                                TenTep         = tep.TenTep
                            };
                            await _hoSoTepDinhKemRepos.InsertAsync(tepNew);
                        }
                        #endregion
                    }

                    #region Lưu lịch sử
                    var _history = new XHoSoXuLyHistory();
                    _history.ThuTucId     = hosoxl.ThuTucId;
                    _history.HoSoXuLyId   = hosoxl.Id;
                    _history.HoSoId       = hosoxl.HoSoId;
                    _history.IsHoSoBS     = hosoxl.IsHoSoBS;
                    _history.NguoiXuLyId  = _session.UserId;
                    _history.NoiDungYKien = null;
                    _history.TrangThaiCV  = hosoxl.TrangThaiCV;
                    _history.DonViXuLy    = (int)CommonENum.DON_VI_XU_LY.VAN_THU;
                    _history.ActionEnum   = (int)CommonENum.FORM_FUNCTION.VAN_THU_DONG_DAU;

                    _history.HoSoIsDat     = hosoxl.HoSoIsDat;
                    _history.HoSoIsDat_Pre = hosoxl.HoSoIsDat;

                    await _hoSoXuLyHistoryRepos.InsertAndGetIdAsync(_history);

                    #endregion
                }
            }
            catch (Exception ex)
            {
                Logger.Fatal(ex.Message);
            }
        }
예제 #2
0
        /// <summary>
        /// 租户注册
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <RegisterTenantOutput> RegisterTenant(RegisterTenantInput input)
        {
            using (CurrentUnitOfWork.SetTenantId(null))
            {
                CheckTenantRegistrationIsEnabled();

                //if (UseCaptchaOnRegistration())//使用手机验证码作为验证
                //{
                //    await _captchaValidator.ValidateAsync(input.CaptchaResponse);
                //}

                switch (input.Type)
                {
                case RegisterType.Telephone:
                {
                    if (input.PhoneNumber.IsNullOrWhiteSpace())
                    {
                        throw new UserFriendlyException(L("Identity.RequiredPhoneNumber"));
                    }

                    await _verificationCodeManager.CheckRegistrationVerificationCode(input.PhoneNumber, input.RegisterCode);

                    break;
                }

                case RegisterType.Email:
                {
                    if (input.EmailAddress.IsNullOrWhiteSpace())
                    {
                        throw new UserFriendlyException(L("Identity.RequiredEmail"));
                    }

                    await _verificationCodeManager.CheckRegistrationVerificationCode(input.EmailAddress, input.RegisterCode);

                    break;
                }

                default:
                    break;
                }

                //Getting host-specific settings
                var isNewRegisteredTenantActiveByDefault = await SettingManager.GetSettingValueForApplicationAsync <bool>(AppSettings.TenantManagement.IsNewRegisteredTenantActiveByDefault);

                var isEmailConfirmationRequiredForLogin = await SettingManager.GetSettingValueForApplicationAsync <bool>(AbpZeroSettingNames.UserManagement.IsEmailConfirmationRequiredForLogin);

                var defaultEditionIdValue = await SettingManager.GetSettingValueForApplicationAsync(AppSettings.TenantManagement.DefaultEdition);

                int?defaultEditionId = null;

                if (!string.IsNullOrEmpty(defaultEditionIdValue) && (await _editionManager.FindByIdAsync(Convert.ToInt32(defaultEditionIdValue)) != null))
                {
                    defaultEditionId = Convert.ToInt32(defaultEditionIdValue);
                }

                var tenantId = await TenantManager.CreateWithAdminUserAsync(
                    input.TenancyName,
                    input.TenancyName,
                    input.Password,
                    input.EmailAddress ?? string.Empty,
                    input.PhoneNumber,
                    null,
                    isNewRegisteredTenantActiveByDefault,
                    defaultEditionId,
                    false,
                    true,
                    null,
                    false,
                    _appUrlService.CreateEmailActivationUrlFormat(input.TenancyName)
                    );

                var tenant = await TenantManager.GetByIdAsync(tenantId);

                await _appNotifier.NewTenantRegisteredAsync(tenant);

                return(new RegisterTenantOutput
                {
                    TenantId = tenant.Id,
                    TenancyName = input.TenancyName,
                    Name = input.TenancyName,
                    UserName = input.TenancyName,
                    IsActive = tenant.IsActive,
                    EmailAddress = input.EmailAddress,
                    IsEmailConfirmationRequired = isEmailConfirmationRequiredForLogin,
                    IsTenantActive = tenant.IsActive
                });
            }
        }
        public async Task <RegisterTenantOutput> RegisterTenant(RegisterTenantInput input)
        {
            if (input.EditionId.HasValue)
            {
                await CheckEditionSubscriptionAsync(input.EditionId.Value, input.SubscriptionStartType, input.Gateway, input.PaymentId);
            }
            else
            {
                await CheckRegistrationWithoutEdition();
            }

            using (CurrentUnitOfWork.SetTenantId(null))
            {
                CheckTenantRegistrationIsEnabled();

                if (UseCaptchaOnRegistration())
                {
                    await _recaptchaValidator.ValidateAsync(input.CaptchaResponse);
                }

                //Getting host-specific settings
                var isNewRegisteredTenantActiveByDefault = await SettingManager.GetSettingValueForApplicationAsync <bool>(AppSettings.TenantManagement.IsNewRegisteredTenantActiveByDefault);

                var isEmailConfirmationRequiredForLogin = await SettingManager.GetSettingValueForApplicationAsync <bool>(AbpZeroSettingNames.UserManagement.IsEmailConfirmationRequiredForLogin);

                DateTime?subscriptionEndDate = null;
                var      isInTrialPeriod     = false;

                if (input.EditionId.HasValue)
                {
                    isInTrialPeriod = input.SubscriptionStartType == SubscriptionStartType.Trial;

                    if (isInTrialPeriod)
                    {
                        var edition = (SubscribableEdition)await _editionManager.GetByIdAsync(input.EditionId.Value);

                        subscriptionEndDate = Clock.Now.AddDays(edition.TrialDayCount ?? 0);
                    }
                }

                var tenantId = await _tenantManager.CreateWithAdminUserAsync(
                    input.TenancyName,
                    input.Name,
                    input.AdminPassword,
                    input.AdminEmailAddress,
                    null,
                    isNewRegisteredTenantActiveByDefault,
                    input.EditionId,
                    false,
                    true,
                    subscriptionEndDate,
                    isInTrialPeriod,
                    AppUrlService.CreateEmailActivationUrlFormat(input.TenancyName)
                    );

                Tenant tenant;

                if (input.SubscriptionStartType == SubscriptionStartType.Paid)
                {
                    if (!input.Gateway.HasValue)
                    {
                        throw new Exception("Gateway is missing!");
                    }

                    var payment = await _subscriptionPaymentRepository.GetByGatewayAndPaymentIdAsync(
                        input.Gateway.Value,
                        input.PaymentId
                        );

                    tenant = await _tenantManager.UpdateTenantAsync(
                        tenantId,
                        true,
                        false,
                        payment.PaymentPeriodType,
                        payment.EditionId,
                        EditionPaymentType.NewRegistration);

                    await _subscriptionPaymentRepository.UpdateByGatewayAndPaymentIdAsync(input.Gateway.Value,
                                                                                          input.PaymentId, tenantId, SubscriptionPaymentStatus.Completed);
                }
                else
                {
                    tenant = await TenantManager.GetByIdAsync(tenantId);
                }

                await _appNotifier.NewTenantRegisteredAsync(tenant);

                if (input.EditionId.HasValue && input.Gateway.HasValue && !input.PaymentId.IsNullOrEmpty())
                {
                    _paymentCache.RemoveCacheItem(input.Gateway.Value, input.PaymentId);
                }

                return(new RegisterTenantOutput
                {
                    TenantId = tenant.Id,
                    TenancyName = input.TenancyName,
                    Name = input.Name,
                    UserName = AbpUserBase.AdminUserName,
                    EmailAddress = input.AdminEmailAddress,
                    IsActive = tenant.IsActive,
                    IsEmailConfirmationRequired = isEmailConfirmationRequiredForLogin,
                    IsTenantActive = tenant.IsActive
                });
            }
        }
        /// <summary>
        /// 创建一个实例
        /// </summary>
        /// <returns></returns>
        public virtual async Task <int> CreateInstance(FlowInstanceCreateDto flowInstanceCreateDto)
        {
            var manager = Manager as FlowInstanceManager;
            var user    = await GetCurrentUserAsync();

            var flowInstance = flowInstanceCreateDto.MapTo <FlowInstance>();

            flowInstance.Code = Common.Fun.ConvertToTimeStamp(DateTime.Now).ToString();
            FlowForm form = null;

            //1.如果流程提交数据没有FlowSchemeId,表示此流程直接由表单创建,提交即代表完成
            if (flowInstanceCreateDto.FlowSchemeId == null || flowInstanceCreateDto.FlowSchemeId.Value == 0)
            {
                if (flowInstanceCreateDto.FlowFormId == null || flowInstanceCreateDto.FlowFormId.Value == 0)
                {
                    throw new UserFriendlyException(L("参数错误,必须提供FlowFormId参数"));
                }
                form = await FlowFormManager.GetByIdFromCacheAsync(flowInstanceCreateDto.FlowFormId.Value);

                //如果表单没有内容,默认从内置表单中获取
                if (string.IsNullOrWhiteSpace(form.FormContent))
                {
                    form.FormContent = Configuration.Modules.Core().DefaultForms.SingleOrDefault(o => o.FormKey == form.FormKey)?.FormContent;
                }
                flowInstance.FlowSchemeId   = null;
                flowInstance.FormContent    = form.FormContent;
                flowInstance.FormType       = form.FormType;
                flowInstance.InstanceName   = form.FormName;
                flowInstance.InstanceStatus = InstanceStatus.Finish;//直接为完成状态

                await manager.CreateInstance(flowInstance);

                await CurrentUnitOfWork.SaveChangesAsync();

                await manager.FinishInstance(flowInstance);//调用流程结束事件

                return(flowInstance.Id);
            }

            //2.从流程定义中复制表单id及流程内容
            var flowScheme = await FlowSchemeManager.GetAll().Include(o => o.FlowForm).Where(o => o.Id == flowInstanceCreateDto.FlowSchemeId).SingleAsync();

            form = await FlowFormManager.GetByIdFromCacheAsync(flowScheme.FlowFormId);

            flowInstance.FlowFormId    = flowScheme.FlowFormId;
            flowInstance.FormContent   = form.FormContent;
            flowInstance.FormType      = flowScheme.FlowForm.FormType;
            flowInstance.SchemeContent = flowScheme.SchemeContent;
            flowInstance.InstanceName  = flowScheme.SchemeName;

            //创建运行实例
            var wfruntime = new FlowRuntime(flowInstance);

            #region 根据运行实例改变当前节点状态

            flowInstance.ActivityId     = wfruntime.nextNodeId;
            flowInstance.ActivityType   = wfruntime.GetNextNodeType();
            flowInstance.ActivityName   = wfruntime.nextNode.name;
            flowInstance.PreviousId     = wfruntime.currentNodeId;
            flowInstance.MakerList      = (wfruntime.GetNextNodeType() != 4 ? GetNextMakers(wfruntime) : "");
            flowInstance.InstanceStatus = (wfruntime.GetNextNodeType() == 4 ? InstanceStatus.Finish : InstanceStatus.Processing);

            await manager.CreateInstance(flowInstance);

            //await CurrentUnitOfWork.SaveChangesAsync();
            if (flowInstance.InstanceStatus == InstanceStatus.Finish)
            {
                await manager.FinishInstance(flowInstance);//调用流程结束事件
            }
            wfruntime.flowInstanceId = flowInstance.Id;

            #endregion 根据运行实例改变当前节点状态

            #region 流程操作记录

            FlowInstanceOperationHistory processOperationHistoryEntity = new FlowInstanceOperationHistory
            {
                FlowInstanceId = flowInstance.Id,
                Content        = "【创建】"
                                 + user.Name
                                 + "创建了一个流程进程【"
                                 + flowInstance.Code + "/"
                                 + flowInstance.InstanceName + "】"
            };
            await FlowInstanceOperationHistoryRepository.InsertAsync(processOperationHistoryEntity);

            #endregion 流程操作记录

            await AddTransHistory(wfruntime);

            return(flowInstance.Id);
        }
예제 #5
0
        public async Task <KetQuaLienThong> LienThongHoSo(List <XCallApiInput> input, int chiCucId, string strTinh = "")
        {
            KetQuaLienThong KetQua = new KetQuaLienThong();

            try
            {
                var objToken = await _callApiAppService.AutoGetToKen(chiCucId);

                if (objToken == null)
                {
                    KetQua.TrangThaiLienThongRequest = (int)CommonENum.TRANG_THAI_LIEN_THONG_REQUEST.CHUA_CO_TAI_KHOAN;
                    return(KetQua);
                }
                if (input != null && input.Count > 0)
                {
                    var _list         = new List <DangKyQuangCaoRequest>();
                    int countTongHoSo = 0;
                    foreach (var item in input)
                    {
                        var _vfaHoSo = await _vfaHoSoRepos.GetAsync(item.Id);

                        if (_vfaHoSo.TrangThaiLienThong == (int)CommonENum.TRANG_THAI_LIEN_THONG.DA_LIEN_THONG_THANH_CONG)
                        {
                            KetQua.TrangThaiLienThongRequest = (int)CommonENum.TRANG_THAI_LIEN_THONG_REQUEST.KHONG_CO_HO_SO_HOAC_DA_LIEN_THONG;
                            continue;
                        }

                        var _request = new DangKyQuangCaoRequest();

                        #region DoanhNgiep
                        _request.DoanhNghiep = item.MapTo <DoanhNghiepModel>();
                        var tinh = await _tinhRepos.FirstOrDefaultAsync(item.TinhId.Value);

                        if (tinh != null)
                        {
                            _request.DoanhNghiep.TinhId = tinh.NiisId;
                        }
                        var huyen = await _huyenRepos.FirstOrDefaultAsync(item.HuyenId.Value);

                        if (huyen != null)
                        {
                            _request.DoanhNghiep.HuyenId = (int)huyen.NiisId;
                        }
                        var xa = await _xaRepos.FirstOrDefaultAsync(item.XaId.Value);

                        if (xa != null)
                        {
                            _request.DoanhNghiep.XaId = (int)xa.NiisId;
                        }
                        #endregion

                        #region DangKyQuangCao
                        _request.DangKyQuangCao.GiayXacNhanToBase64String = FileToBase64String(item.GiayTiepNhan);
                        _request.DangKyQuangCao.NgayCapChungNhan          = item.NgayTraKetQua.Value.ToString("yyyy-MM-dd HH:mm:ss");

                        //Hình thức quảng cáo
                        if (!string.IsNullOrEmpty(item.LoaiQuangCaoJson))
                        {
                            //var quangCaos = JsonConvert.DeserializeObject<List<JsonHinhThucQuangCao03Dto>>(item.LoaiQuangCaoJson);
                            //foreach (var quangCao in quangCaos)
                            //{
                            //    var loaiQuangCao = await _loaiQuangCaoRepos.FirstOrDefaultAsync(quangCao.Id);
                            //    if (loaiQuangCao != null)
                            //    {
                            //        _request.DangKyQuangCao.LoaiHinhQuangCaos.Add(loaiQuangCao.NiisId.Value);
                            //    }
                            //}
                        }
                        if (!string.IsNullOrEmpty(item.LoaiQuangCaoKhacJson))
                        {
                            _request.DangKyQuangCao.LoaiHinhQuangCaoKhacs = item.LoaiQuangCaoKhacJson;
                        }

                        //Sản phẩm
                        if (!string.IsNullOrEmpty(item.JsonSanPham))
                        {
                            //var sanPhams = JsonConvert.DeserializeObject<List<HoSoSanPhamChiTiet03Dto>>(item.JsonSanPham);
                            //foreach (var sanPham in sanPhams)
                            //{
                            //    var sanPhamRequest = new SanPhamQuangCao()
                            //    {
                            //        STT = sanPham.Stt.ToString(),
                            //        TenThucPham = sanPham.TenThucPham,
                            //        SoGiayCongBo = sanPham.SoGiayCongBo
                            //    };
                            //    _request.DangKyQuangCao.SanPhams.Add(sanPhamRequest);
                            //}
                        }
                        #endregion

                        #region Update TrangThaiLienThong
                        _vfaHoSo.TrangThaiLienThong = (int)CommonENum.TRANG_THAI_LIEN_THONG.DA_LIEN_THONG_KHONG_THANH_CONG;
                        _vfaHoSo.NgayLienThong      = DateTime.Now;

                        //Guid
                        if (string.IsNullOrEmpty(_vfaHoSo.Guid))
                        {
                            string guid = "";
                            if (string.IsNullOrEmpty(strTinh))
                            {
                                guid = CreateGuid(_vfaHoSo.Id, RemoveUnicodeTinh(chiCucId));
                            }
                            else
                            {
                                guid = CreateGuid(_vfaHoSo.Id, strTinh);
                            }
                            _request.DangKyQuangCao.Guid = guid;
                            _vfaHoSo.Guid = guid;
                        }
                        else
                        {
                            _request.DangKyQuangCao.Guid = _vfaHoSo.Guid;
                        }

                        await _vfaHoSoRepos.UpdateAsync(_vfaHoSo);

                        CurrentUnitOfWork.SaveChanges();
                        #endregion

                        _list.Add(_request);
                        countTongHoSo++;
                    }
                    KetQua.TongSoHoSo = countTongHoSo;

                    string dataJson  = JsonConvert.SerializeObject(_list);
                    string api       = "api/services/app/dangKyQuangCaoApi/Insert";
                    var    objResult = await _callApiAppService.CallApi(chiCucId, dataJson, api, objToken.Result.ToString());

                    if (objResult.Result != null && objResult.Result.ListResult.Count > 0 && objResult.Success == true)
                    {
                        int countHoSoThatBai   = 0;
                        int countHoSoThanhCong = 0;
                        foreach (var result in objResult.Result.ListResult)
                        {
                            var _vfaHoSoUpdate = await _vfaHoSoRepos.FirstOrDefaultAsync(p => p.Guid == result.Guid);

                            if (_vfaHoSoUpdate != null && (result.Code == MessageErorr.Er100.Code || result.Code == MessageErorr.Er03.Code))
                            {
                                _vfaHoSoUpdate.TrangThaiLienThong     = (int)CommonENum.TRANG_THAI_LIEN_THONG.DA_LIEN_THONG_THANH_CONG;
                                _vfaHoSoUpdate.NgayLienThongThanhCong = DateTime.Now;
                                _vfaHoSoUpdate.LienThongId            = result.LienThongId;
                                await _vfaHoSoRepos.UpdateAsync(_vfaHoSoUpdate);

                                countHoSoThanhCong++;
                            }
                            else
                            {
                                countHoSoThatBai++;
                            }
                        }
                        KetQua.HoSoThanhCong             = countHoSoThanhCong;
                        KetQua.HoSoThatBai               = countHoSoThatBai;
                        KetQua.ListResult                = objResult.Result.ListResult;
                        KetQua.TrangThaiLienThongRequest = KetQua.HoSoThanhCong == 0 ? KetQua.TrangThaiLienThongRequest = (int)CommonENum.TRANG_THAI_LIEN_THONG_REQUEST.KHONG_THANH_CONG : (int)CommonENum.TRANG_THAI_LIEN_THONG_REQUEST.THANH_CONG;
                    }
                    else
                    {
                        KetQua.TrangThaiLienThongRequest = (int)CommonENum.TRANG_THAI_LIEN_THONG_REQUEST.CHUA_CO_TAI_KHOAN;
                    }
                }
                return(KetQua);
            }
            catch (Exception ex)
            {
                _logger.Fatal(ex.Message);
                KetQua.TrangThaiLienThongRequest = (int)CommonENum.TRANG_THAI_LIEN_THONG_REQUEST.KHONG_THANH_CONG;
                return(KetQua);
            }
        }
예제 #6
0
        public virtual async Task <ActionResult> Register(TenantRegistrationViewModel model)
        {
            try
            {
                CheckTenantRegistrationIsEnabled();

                if (UseCaptchaOnRegistration())
                {
                    var recaptchaHelper = this.GetRecaptchaVerificationHelper();
                    if (recaptchaHelper.Response.IsNullOrEmpty())
                    {
                        throw new UserFriendlyException(L("CaptchaCanNotBeEmpty"));
                    }

                    if (recaptchaHelper.VerifyRecaptchaResponse() != RecaptchaVerificationResult.Success)
                    {
                        throw new UserFriendlyException(L("IncorrectCaptchaAnswer"));
                    }
                }

                //Getting host-specific settings
                var isNewRegisteredTenantActiveByDefault = await SettingManager.GetSettingValueForApplicationAsync <bool>(AppSettings.TenantManagement.IsNewRegisteredTenantActiveByDefault);

                var isEmailConfirmationRequiredForLogin = await SettingManager.GetSettingValueForApplicationAsync <bool>(AbpZeroSettingNames.UserManagement.IsEmailConfirmationRequiredForLogin);

                var defaultEditionIdValue = await SettingManager.GetSettingValueForApplicationAsync(AppSettings.TenantManagement.DefaultEdition);

                int?defaultEditionId = null;

                if (!string.IsNullOrEmpty(defaultEditionIdValue) && (await _editionManager.FindByIdAsync(Convert.ToInt32(defaultEditionIdValue)) != null))
                {
                    defaultEditionId = Convert.ToInt32(defaultEditionIdValue);
                }

                CurrentUnitOfWork.SetTenantId(null);

                var tenantId = await _tenantManager.CreateWithAdminUserAsync(
                    model.TenancyName,
                    model.Name,
                    model.AdminPassword,
                    model.AdminEmailAddress,
                    null,
                    isNewRegisteredTenantActiveByDefault,
                    defaultEditionId,
                    false,
                    isEmailConfirmationRequiredForLogin);

                ViewBag.UseCaptcha = UseCaptchaOnRegistration();

                var tenant = await _tenantManager.GetByIdAsync(tenantId);

                await _appNotifier.NewTenantRegisteredAsync(tenant);

                CurrentUnitOfWork.SetTenantId(tenant.Id);

                var user = await _userManager.FindByNameAsync(Authorization.Users.User.AdminUserName);

                //Directly login if possible
                if (user.IsActive && (user.IsEmailConfirmed || !isEmailConfirmationRequiredForLogin))
                {
                    var loginResult = await GetLoginResultAsync(user.UserName, model.AdminPassword, tenant.TenancyName);

                    if (loginResult.Result == AbpLoginResultType.Success)
                    {
                        await SignInAsync(loginResult.User, loginResult.Identity);

                        return(Redirect(Url.Action("Index", "Application")));
                    }

                    Logger.Warn("New registered user could not be login. This should not be normally. login result: " + loginResult.Result);
                }

                return(View("RegisterResult", new TenantRegisterResultViewModel
                {
                    TenancyName = model.TenancyName,
                    Name = model.Name,
                    UserName = Authorization.Users.User.AdminUserName,
                    EmailAddress = model.AdminEmailAddress,
                    IsActive = isNewRegisteredTenantActiveByDefault,
                    IsEmailConfirmationRequired = isEmailConfirmationRequiredForLogin
                }));
            }
            catch (UserFriendlyException ex)
            {
                ViewBag.UseCaptcha   = UseCaptchaOnRegistration();
                ViewBag.ErrorMessage = ex.Message;

                return(View("Index", model));
            }
        }
예제 #7
0
        public virtual async Task <ActionResult> Register(RegisterViewModel model)
        {
            try
            {
                CheckSelfRegistrationIsEnabled();

                if (!model.IsExternalLogin && UseCaptchaOnRegistration())
                {
                    var recaptchaHelper = this.GetRecaptchaVerificationHelper();
                    if (recaptchaHelper.Response.IsNullOrEmpty())
                    {
                        throw new UserFriendlyException(L("CaptchaCanNotBeEmpty"));
                    }

                    if (recaptchaHelper.VerifyRecaptchaResponse() != RecaptchaVerificationResult.Success)
                    {
                        throw new UserFriendlyException(L("IncorrectCaptchaAnswer"));
                    }
                }

                if (!_multiTenancyConfig.IsEnabled)
                {
                    model.TenancyName = Tenant.DefaultTenantName;
                }
                else if (model.TenancyName.IsNullOrEmpty())
                {
                    throw new UserFriendlyException(L("TenantNameCanNotBeEmpty"));
                }

                CurrentUnitOfWork.SetTenantId(null);

                var tenant = await GetActiveTenantAsync(model.TenancyName);

                CurrentUnitOfWork.SetTenantId(tenant.Id);

                if (!await SettingManager.GetSettingValueForTenantAsync <bool>(AppSettings.UserManagement.AllowSelfRegistration, tenant.Id))
                {
                    throw new UserFriendlyException(L("SelfUserRegistrationIsDisabledMessage_Detail"));
                }

                //Getting tenant-specific settings
                var isNewRegisteredUserActiveByDefault = await SettingManager.GetSettingValueForTenantAsync <bool>(AppSettings.UserManagement.IsNewRegisteredUserActiveByDefault, tenant.Id);

                var isEmailConfirmationRequiredForLogin = await SettingManager.GetSettingValueForTenantAsync <bool>(AbpZeroSettingNames.UserManagement.IsEmailConfirmationRequiredForLogin, tenant.Id);

                var user = new User
                {
                    TenantId     = tenant.Id,
                    Name         = model.Name,
                    Surname      = model.Surname,
                    EmailAddress = model.EmailAddress,
                    IsActive     = isNewRegisteredUserActiveByDefault
                };

                ExternalLoginInfo externalLoginInfo = null;
                if (model.IsExternalLogin)
                {
                    externalLoginInfo = await _authenticationManager.GetExternalLoginInfoAsync();

                    if (externalLoginInfo == null)
                    {
                        throw new ApplicationException("Can not external login!");
                    }

                    user.Logins = new List <UserLogin>
                    {
                        new UserLogin
                        {
                            LoginProvider = externalLoginInfo.Login.LoginProvider,
                            ProviderKey   = externalLoginInfo.Login.ProviderKey,
                            TenantId      = tenant.Id
                        }
                    };

                    model.UserName = model.EmailAddress;
                    model.Password = Authorization.Users.User.CreateRandomPassword();

                    if (string.Equals(externalLoginInfo.Email, model.EmailAddress, StringComparison.InvariantCultureIgnoreCase))
                    {
                        user.IsEmailConfirmed = true;
                    }
                }
                else
                {
                    if (model.UserName.IsNullOrEmpty() || model.Password.IsNullOrEmpty())
                    {
                        throw new UserFriendlyException(L("FormIsNotValidMessage"));
                    }
                }

                user.UserName = model.UserName;
                user.Password = new PasswordHasher().HashPassword(model.Password);

                user.Roles = new List <UserRole>();
                foreach (var defaultRole in await _roleManager.Roles.Where(r => r.IsDefault).ToListAsync())
                {
                    user.Roles.Add(new UserRole(tenant.Id, user.Id, defaultRole.Id));
                }

                CheckErrors(await _userManager.CreateAsync(user));
                await _unitOfWorkManager.Current.SaveChangesAsync();

                if (!user.IsEmailConfirmed)
                {
                    user.SetNewEmailConfirmationCode();
                    await _userEmailer.SendEmailActivationLinkAsync(user);
                }

                //Notifications
                await _notificationSubscriptionManager.SubscribeToAllAvailableNotificationsAsync(user.ToUserIdentifier());

                await _appNotifier.WelcomeToTheApplicationAsync(user);

                await _appNotifier.NewUserRegisteredAsync(user);

                //Directly login if possible
                if (user.IsActive && (user.IsEmailConfirmed || !isEmailConfirmationRequiredForLogin))
                {
                    AbpLoginResult <Tenant, User> loginResult;
                    if (externalLoginInfo != null)
                    {
                        loginResult = await _logInManager.LoginAsync(externalLoginInfo.Login, tenant.TenancyName);
                    }
                    else
                    {
                        loginResult = await GetLoginResultAsync(user.UserName, model.Password, tenant.TenancyName);
                    }

                    if (loginResult.Result == AbpLoginResultType.Success)
                    {
                        await SignInAsync(loginResult.User, loginResult.Identity);

                        return(Redirect(Url.Action("Index", "Application")));
                    }

                    Logger.Warn("New registered user could not be login. This should not be normally. login result: " + loginResult.Result);
                }

                return(View("RegisterResult", new RegisterResultViewModel
                {
                    TenancyName = tenant.TenancyName,
                    NameAndSurname = user.Name + " " + user.Surname,
                    UserName = user.UserName,
                    EmailAddress = user.EmailAddress,
                    IsActive = user.IsActive,
                    IsEmailConfirmationRequired = isEmailConfirmationRequiredForLogin
                }));
            }
            catch (UserFriendlyException ex)
            {
                ViewBag.IsMultiTenancyEnabled = _multiTenancyConfig.IsEnabled;
                ViewBag.UseCaptcha            = !model.IsExternalLogin && UseCaptchaOnRegistration();
                ViewBag.ErrorMessage          = ex.Message;

                return(View("Register", model));
            }
        }
예제 #8
0
        private async Task BuildForInternalAsync(Tenant tenant)
        {
            //Create Organization Units

            var organizationUnits = new List <OrganizationUnit>();

            var producing = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Producing");

            var researchAndDevelopment = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Research & Development", producing);

            var ivrProducts = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "IVR Related Products", researchAndDevelopment);

            var voiceTech = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Voice Technologies", researchAndDevelopment);

            var inhouseProjects = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Inhouse Projects", researchAndDevelopment);

            var qualityManagement = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Quality Management", producing);

            var testing = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Testing", producing);

            var selling = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Selling");

            var marketing = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Marketing", selling);

            var sales = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Sales", selling);

            var custRelations = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Customer Relations", selling);

            var supporting = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Supporting");

            var buying = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Buying", supporting);

            var humanResources = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Human Resources", supporting);

            //Create users

            var users = _randomUserGenerator.GetRandomUsers(RandomHelper.GetRandom(12, 26), tenant.Id);

            foreach (var user in users)
            {
                //Create the user
                await _userManager.CreateAsync(user);

                await CurrentUnitOfWork.SaveChangesAsync();

                //Add to roles
                _userManager.AddToRole(user.Id, StaticRoleNames.Tenants.User);

                //Add to OUs
                var randomOus = MyRandomHelper.GenerateRandomizedList(organizationUnits).Take(RandomHelper.GetRandom(0, 3));
                foreach (var ou in randomOus)
                {
                    await _userManager.AddToOrganizationUnitAsync(user, ou);
                }

                //Set profile picture
                if (RandomHelper.GetRandom(100) < 70) //A user will have a profile picture in 70% probability.
                {
                    await SetRandomProfilePictureAsync(user);
                }
            }

            //Set a picture to admin!
            var admin = _userManager.FindByName(User.AdminUserName);

            await SetRandomProfilePictureAsync(admin);
        }
예제 #9
0
        public async Task <KetQuaLienThong> LienThongHoSo(List <XCallApiInput> input, int chiCucId, string strTinh = "")
        {
            KetQuaLienThong KetQua = new KetQuaLienThong();

            try
            {
                var objToken = await _callApiAppService.AutoGetToKen(chiCucId);

                if (objToken == null)
                {
                    KetQua.TrangThaiLienThongRequest = (int)CommonENum.TRANG_THAI_LIEN_THONG_REQUEST.CHUA_CO_TAI_KHOAN;
                    return(KetQua);
                }
                if (input != null && input.Count > 0)
                {
                    var _list         = new List <TuCongBoRequest>();
                    int countTongHoSo = 0;
                    foreach (var item in input)
                    {
                        var _vfaHoSo = await _vfaHoSoRepos.GetAsync(item.Id);

                        if (_vfaHoSo.TrangThaiLienThong == (int)CommonENum.TRANG_THAI_LIEN_THONG.DA_LIEN_THONG_THANH_CONG)
                        {
                            KetQua.TrangThaiLienThongRequest = (int)CommonENum.TRANG_THAI_LIEN_THONG_REQUEST.KHONG_CO_HO_SO_HOAC_DA_LIEN_THONG;
                            continue;
                        }

                        var _request = new TuCongBoRequest();

                        #region DoanhNgiep
                        _request.DoanhNghiep = item.MapTo <DoanhNghiepModel>();
                        var tinh = await _tinhRepos.FirstOrDefaultAsync(item.TinhId.Value);

                        if (tinh != null)
                        {
                            _request.DoanhNghiep.TinhId = tinh.NiisId;
                        }
                        var huyen = await _huyenRepos.FirstOrDefaultAsync(item.HuyenId.Value);

                        if (huyen != null)
                        {
                            _request.DoanhNghiep.HuyenId = (int)huyen.NiisId;
                        }
                        var xa = await _xaRepos.FirstOrDefaultAsync(item.XaId.Value);

                        if (xa != null)
                        {
                            _request.DoanhNghiep.XaId = (int)xa.NiisId;
                        }
                        #endregion

                        #region TuCongBo
                        _request.TuCongBo = item.MapTo <TuCongBoModel>();
                        _request.TuCongBo.GiayXacNhanToBase64String = FileToBase64String(item.DuongDanTepCA);
                        _request.TuCongBo.NgayTuCongBo = item.NgayTuCongBo.Value.ToString("yyyy-MM-dd HH:mm:ss");
                        _request.TuCongBo.ChatLieuBaoBiVaQuyCachDongGoi = item.ChatLieuBaoBi + " " + item.QuyCachDongGoi;
                        _request.TuCongBo.TenVaDiaChiCoSoSanXuat        = item.TenCoSoSanXuat + " " + item.DiaChiCoSoSanXuat;

                        //Nhóm san pham NiisId
                        var nhomSanPham = await _nhomSanPhamRepos.FirstOrDefaultAsync(item.NhomSanPhamId.Value);

                        if (nhomSanPham != null)
                        {
                            _request.TuCongBo.NhomSanPhamTCBId = nhomSanPham.NiisId;
                        }

                        //QuocGia nhap khu
                        if (item.QuocGiaNhapKhauId != null)
                        {
                            var quocGia = await _quocGiaRepos.FirstOrDefaultAsync(item.QuocGiaNhapKhauId.Value);

                            if (quocGia != null)
                            {
                                _request.TuCongBo.QuocGiaNhapKhauId = quocGia.NiisId;
                            }
                        }
                        #endregion

                        #region Update TrangThaiLienThong
                        _vfaHoSo.TrangThaiLienThong = (int)CommonENum.TRANG_THAI_LIEN_THONG.DA_LIEN_THONG_KHONG_THANH_CONG;
                        _vfaHoSo.NgayLienThong      = DateTime.Now;

                        //Guid
                        if (string.IsNullOrEmpty(_vfaHoSo.Guid))
                        {
                            string guid = "";
                            if (string.IsNullOrEmpty(strTinh))
                            {
                                guid = CreateGuid(_vfaHoSo.Id, RemoveUnicodeTinh(chiCucId));
                            }
                            else
                            {
                                guid = CreateGuid(_vfaHoSo.Id, strTinh);
                            }
                            _request.TuCongBo.Guid = guid;
                            _vfaHoSo.Guid          = guid;
                        }
                        else
                        {
                            _request.TuCongBo.Guid = _vfaHoSo.Guid;
                        }

                        await _vfaHoSoRepos.UpdateAsync(_vfaHoSo);

                        CurrentUnitOfWork.SaveChanges();
                        #endregion

                        _list.Add(_request);
                        countTongHoSo++;
                    }
                    KetQua.TongSoHoSo = countTongHoSo;

                    string dataJson  = JsonConvert.SerializeObject(_list);
                    string api       = "api/services/app/tuCongBoApi/Insert";
                    var    objResult = await _callApiAppService.CallApi(chiCucId, dataJson, api, objToken.Result.ToString());

                    if (objResult.Result != null && objResult.Result.ListResult.Count > 0 && objResult.Success == true)
                    {
                        int countHoSoThatBai   = 0;
                        int countHoSoThanhCong = 0;
                        foreach (var result in objResult.Result.ListResult)
                        {
                            var _vfaHoSoUpdate = await _vfaHoSoRepos.FirstOrDefaultAsync(p => p.Guid == result.Guid);

                            if (_vfaHoSoUpdate != null && (result.Code == MessageErorr.Er100.Code || result.Code == MessageErorr.Er03.Code))
                            {
                                _vfaHoSoUpdate.TrangThaiLienThong     = (int)CommonENum.TRANG_THAI_LIEN_THONG.DA_LIEN_THONG_THANH_CONG;
                                _vfaHoSoUpdate.NgayLienThongThanhCong = DateTime.Now;
                                _vfaHoSoUpdate.LienThongId            = result.LienThongId;
                                await _vfaHoSoRepos.UpdateAsync(_vfaHoSoUpdate);

                                CurrentUnitOfWork.SaveChanges();

                                countHoSoThanhCong++;
                            }
                            else
                            {
                                countHoSoThatBai++;
                            }
                        }
                        KetQua.HoSoThanhCong             = countHoSoThanhCong;
                        KetQua.HoSoThatBai               = countHoSoThatBai;
                        KetQua.ListResult                = objResult.Result.ListResult;
                        KetQua.TrangThaiLienThongRequest = KetQua.HoSoThanhCong == 0 ? KetQua.TrangThaiLienThongRequest = (int)CommonENum.TRANG_THAI_LIEN_THONG_REQUEST.KHONG_THANH_CONG : (int)CommonENum.TRANG_THAI_LIEN_THONG_REQUEST.THANH_CONG;
                    }
                    else
                    {
                        KetQua.TrangThaiLienThongRequest = (int)CommonENum.TRANG_THAI_LIEN_THONG_REQUEST.KHONG_THANH_CONG;
                    }
                }

                return(KetQua);
            }
            catch (Exception ex)
            {
                _logger.Fatal(ex.Message);
                KetQua.TrangThaiLienThongRequest = (int)CommonENum.TRANG_THAI_LIEN_THONG_REQUEST.KHONG_THANH_CONG;
                return(KetQua);
            }
        }
        public async Task <ReceiveSyncResultDto> SyncSingleUser(ReceiveSyncUserDto input)
        {
            var current_tenantid = 2;
            var action           = input.ActionName.ToLower();

            using (CurrentUnitOfWork.SetTenantId(current_tenantid))
            {
                try
                {
                    var user = await this.GetUserByWorkWeinxinId(input.WXId);

                    if (action == "create_user")
                    {
                        if (user != null)
                        {
                            return(new ReceiveSyncResultDto(10, "用户已存在"));
                        }
                        user = ObjectMapper.Map <User>(input.Data);

                        user.SetNormalizedNames();
                        user.TenantId         = current_tenantid;
                        user.Password         = _passwordHasher.HashPassword(user, "000000");
                        user.IsEmailConfirmed = true;


                        await UserManager.CreateAsync(user);

                        CurrentUnitOfWork.SaveChanges();

                        var user_id = user.Id;

                        await _userLoginRepository.InsertAsync(new UserLogin
                        {
                            UserId        = user_id,
                            LoginProvider = "Wechat",
                            ProviderKey   = input.WXId,
                            TenantId      = current_tenantid
                        });

                        await _baseUserRepository.InsertAsync(new BaseUserEmp
                        {
                            AbpUserId    = user_id,
                            EmpOrderNo   = user_id.ToString(),
                            EmpStationId = "",
                            EmpStatus    = "1",
                            EmpUserGuid  = Guid.NewGuid().ToString("N"),
                            IsLeader     = "",
                            EmpUserId    = input.WXId
                        });
                    }
                    else if (action == "modify_user")
                    {
                        if (user == null)
                        {
                            return(new ReceiveSyncResultDto(11, "用户不存在"));
                        }
                        user.EmailAddress   = input.Data.EmailAddress;
                        user.Surname        = input.Data.Surname;
                        user.Avatar         = input.Data.Avatar;
                        user.Position       = input.Data.Position;
                        user.Name           = input.Data.Name;
                        user.Sex            = input.Data.Sex;
                        user.SelectDistrict = input.Data.SelectDistrict;
                        user.IsActive       = input.Data.IsActive;
                        user.PhoneNumber    = input.Data.PhoneNumber;
                        await UserManager.UpdateAsync(user);
                    }
                    else if (action == "delete_user")
                    {
                        if (user == null)
                        {
                            return(new ReceiveSyncResultDto(11, "用户不存在"));
                        }
                        await _userRepository.DeleteAsync(user);
                    }
                    else
                    {
                        return(new ReceiveSyncResultDto(2, "无法识别Action"));
                    }
                    return(new ReceiveSyncResultDto(0, "success"));
                }
                catch (Exception ex)
                {
                    return(new ReceiveSyncResultDto(99, ex.Message));
                }
            }
        }
        public async Task <ReceiveSyncResultDto> SyncSingleOrganizationUnits(ReceiveSyncOrganizationDto input)
        {
            var current_tenantid = 2;
            var action           = input.ActionName.ToLower();

            using (CurrentUnitOfWork.SetTenantId(current_tenantid))
            {
                var parent = await _organizationUnitRepository.FirstOrDefaultAsync(x => x.WXDeptId == input.WXParentDeptId);

                if (action != "delete_dept")
                {
                    if (parent == null)
                    {
                        return(new ReceiveSyncResultDto(33, "父级部门不存在"));
                    }
                }

                var entity = await _organizationUnitRepository.FirstOrDefaultAsync(x => x.WXDeptId == input.WXDeptId);

                var base_org   = _baseOrgRepository.FirstOrDefault(o => o.WxId == input.WXDeptId.ToString());
                var parent_org = _baseOrgRepository.FirstOrDefault(x => x.WxId == input.WXParentDeptId.ToString());
                if (action == "create_dept")
                {
                    if (entity != null)
                    {
                        return(new ReceiveSyncResultDto(30, "部门已存在"));
                    }
                    entity = new AbpOrganizationUnitExtend
                    {
                        TenantId       = current_tenantid,//AbpSession.TenantId,
                        WXDeptId       = input.WXDeptId,
                        DisplayName    = input.DisplayName,
                        WXParentDeptId = input.WXParentDeptId,
                        ParentId       = parent.Id,
                        Code           = ""
                    };
                    var result_id = _organizationUnitRepository.InsertAndGetId(entity);
                    //CurrentUnitOfWork.SaveChanges();
                    entity.Code = string.IsNullOrEmpty(parent.Code) ? result_id.ToString() : parent.Code + ":" + result_id;
                    entity.Id   = result_id;
                    _organizationUnitRepository.Update(entity);

                    if (parent.Id == 1)
                    {
                        _baseOrgRepository.Insert(new BaseUserOrg
                        {
                            Name          = input.DisplayName,
                            OrgGuid       = Guid.NewGuid().ToString(),
                            OrgOrderNo    = input.WXDeptId,
                            OrgParentGuid = "0",
                            ParentId      = 0,
                            WxId          = input.WXDeptId.ToString()
                        });
                    }
                    else
                    {
                        if (parent_org != null)
                        {
                            _baseOrgRepository.Insert(new BaseUserOrg
                            {
                                Name          = input.DisplayName,
                                OrgGuid       = Guid.NewGuid().ToString(),
                                OrgOrderNo    = input.WXDeptId,
                                OrgParentGuid = parent_org.OrgGuid,
                                ParentId      = parent_org.Id,
                                WxId          = input.WXDeptId.ToString()
                            });
                        }
                    }
                }
                else if (action == "modify_dept")
                {
                    if (entity == null)
                    {
                        return(new ReceiveSyncResultDto(31, "部门不存在"));
                    }
                    entity.TenantId       = current_tenantid;
                    entity.DisplayName    = input.DisplayName;
                    entity.WXParentDeptId = parent.WXDeptId;
                    entity.ParentId       = parent.Id;
                    entity.Code           = string.IsNullOrEmpty(parent.Code) ? entity.Id.ToString() : parent.Code + ":" + entity.Id;
                    await _organizationUnitRepository.UpdateAsync(entity);

                    base_org.Name          = input.DisplayName;
                    base_org.OrgParentGuid = parent_org != null ? parent_org.OrgGuid : "0";
                    base_org.ParentId      = parent_org != null ? parent_org.Id : 0;
                    _baseOrgRepository.Update(base_org);
                }
                else if (action == "delete_dept")
                {
                    if (entity == null)
                    {
                        return(new ReceiveSyncResultDto(31, "部门不存在"));
                    }
                    var any_user = await _userOrganizationUnitRepository.GetAll().AnyAsync(x => x.OrganizationUnitId == entity.Id);

                    if (any_user)
                    {
                        return(new ReceiveSyncResultDto(32, "部门内仍有用户"));
                    }
                    await _organizationUnitRepository.DeleteAsync(entity);

                    await _baseOrgRepository.DeleteAsync(base_org);

                    return(new ReceiveSyncResultDto(0, ""));
                }
                else
                {
                    return(new ReceiveSyncResultDto(2, "无法识别Action"));
                }

                return(new ReceiveSyncResultDto(0, ""));
            }
        }
예제 #12
0
        public override async Task <UserDto> CreateAsync(CreateUserDto input)
        {
            CheckCreatePermission();

            var user = ObjectMapper.Map <User>(input);

            if (input.RoleTypeList != null && input.RoleTypeList.Count > 0)
            {
                user.InitRoleType = input.RoleTypeList[0];  //初始角色类型
            }

            user.TenantId         = AbpSession.TenantId;
            user.IsEmailConfirmed = true;

            await _userManager.InitializeOptionsAsync(AbpSession.TenantId);

            CheckErrors(await _userManager.CreateAsync(user, input.Password));

            if (input.RoleNames != null)
            {
                CheckErrors(await _userManager.SetRolesAsync(user, input.RoleNames));
            }

            CurrentUnitOfWork.SaveChanges();


            await SetOrganization(user, input.Organizations);

            //Notifications
            await _notificationSubscriptionManager.SubscribeToAllAvailableNotificationsAsync(user.ToUserIdentifier());

            await _appNotifier.WelcomeToTheApplicationAsync(user);

            try
            {
                if (input.SendActivationEmail && !string.IsNullOrWhiteSpace(input.EmailAddress))
                {
                    var body = $"您好,系统已为您创建账号,用户名:{input.UserName}, 验证码:{input.Password},感谢您使用本系统";
                    if (!input.IsActive)
                    {
                        body = $"您好,系统已为您创建账号,用户名:{input.UserName}, 验证码:{input.Password}," +
                               "首次登陆需要激活帐号,感谢您使用本系统。";
                    }
                    var subject = "账号创建通知";
                    await _emailSender.SendAsync(input.EmailAddress, subject, body);
                }
                if (input.SendActivationMessage && !string.IsNullOrWhiteSpace(input.PhoneNumber))
                {
                    var body = $"您好,系统已为您创建账号,用户名:{input.UserName}, 密码:{input.Password},感谢您使用本系统";
                    if (!input.IsActive)
                    {
                        body = $"您好,系统已为您创建账号,用户名:{input.UserName}, 密码:{input.Password},首次登陆需要激活帐号,感谢您使用本系统。";
                    }
                    await _smsSender.Sender(input.PhoneNumber, body);
                }
            }
            catch (Exception)
            {
                //ignore
            }
            return(MapToEntityDto(user));
        }
 public IInterceptorChain ResolveParameterValue(IMessage message)
 {
     return(CurrentUnitOfWork.Map(uow => uow.GetResource <IInterceptorChain>(INTERCEPTOR_CHAIN_EMITTER_KEY))
            .OrElseThrow(() => new InvalidOperationException("InterceptorChain should have been injected")));
 }
 public static void Initialize(IInterceptorChain interceptorChain)
 {
     Assert.State(CurrentUnitOfWork.IsStarted,
                  () => "An active Unit of Work is required for injecting interceptor chain");
     CurrentUnitOfWork.Get().Resources[INTERCEPTOR_CHAIN_EMITTER_KEY] = interceptorChain;
 }
예제 #15
0
 public void UseFamilyDataFilter()
 {
     CurrentUnitOfWork.SetFilterParameter(ChimaDataFilter.FamillyDataFilter, ChimaDataFilter.FamillyPara, Family);
     EnableFamilyDataFilter();
 }
        public async Task MarkAllUnreadMessagesOfUserAsRead(MarkAllUnreadMessagesOfUserAsReadInput input)
        {
            var userId   = AbpSession.GetUserId();
            var tenantId = AbpSession.TenantId;

            // receiver messages
            var messages = await _chatMessageRepository
                           .GetAll()
                           .Where(m =>
                                  m.UserId == userId &&
                                  m.TargetTenantId == input.TenantId &&
                                  m.TargetUserId == input.UserId &&
                                  m.ReadState == ChatMessageReadState.Unread)
                           .ToListAsync();

            if (!messages.Any())
            {
                return;
            }

            foreach (var message in messages)
            {
                message.ChangeReadState(ChatMessageReadState.Read);
            }

            // sender messages
            using (CurrentUnitOfWork.SetTenantId(input.TenantId))
            {
                var reverseMessages = await _chatMessageRepository.GetAll()
                                      .Where(m => m.UserId == input.UserId && m.TargetTenantId == tenantId && m.TargetUserId == userId)
                                      .ToListAsync();

                if (!reverseMessages.Any())
                {
                    return;
                }

                foreach (var message in reverseMessages)
                {
                    message.ChangeReceiverReadState(ChatMessageReadState.Read);
                }
            }

            var userIdentifier   = AbpSession.ToUserIdentifier();
            var friendIdentifier = input.ToUserIdentifier();

            _userFriendsCache.ResetUnreadMessageCount(userIdentifier, friendIdentifier);

            var onlineUserClients = _onlineClientManager.GetAllByUserId(userIdentifier);

            if (onlineUserClients.Any())
            {
                await _chatCommunicator.SendAllUnreadMessagesOfUserReadToClients(onlineUserClients, friendIdentifier);
            }

            var onlineFriendClients = _onlineClientManager.GetAllByUserId(friendIdentifier);

            if (onlineFriendClients.Any())
            {
                await _chatCommunicator.SendReadStateChangeToClients(onlineFriendClients, userIdentifier);
            }
        }
예제 #17
0
 protected void DisableFamilyDataFilter()
 {
     CurrentUnitOfWork.DisableFilter(ChimaDataFilter.FamillyDataFilter);
 }
예제 #18
0
        public async Task <APIResultDto> SubmitActivityBanquetWeChatAsync(ActivityBanquetWeChatDto input)
        {
            Logger.InfoFormat("ActivityBanquetWeChatDto:{0}", Newtonsoft.Json.Linq.JObject.FromObject(input).ToString());
            var banquest = input.MapTo <ActivityBanquet>();
            var delivery = input.MapTo <ActivityDeliveryInfo>();//收货信息

            var user = await _wechatuserManager.GetWeChatUserAsync(input.OpenId, input.TenantId);

            if (user == null)
            {
                return(new APIResultDto()
                {
                    Code = 701, Msg = "当前用户无效"
                });
            }

            if (user.UserType != UserTypeEnum.零售客户 && user.UserType != UserTypeEnum.客户经理)
            {
                return(new APIResultDto()
                {
                    Code = 702, Msg = "当前用户类型不支持"
                });
            }

            //微信服务器下载图片
            banquest.PhotoUrl = await DownloadWechatImgs(input.PhotoUrl, input.AppId);

            using (CurrentUnitOfWork.SetTenantId(input.TenantId))
            {
                //1、保存宴席信息
                var activityForm = await _activityFormRepository.GetAsync(input.ActivityFormId);

                if (user.UserType == UserTypeEnum.零售客户)
                {
                    banquest.Responsible = activityForm.ManagerName;
                    banquest.Executor    = activityForm.RetailerName;
                }
                else//客户经理更新状态
                {
                    activityForm.Status = FormStatusEnum.资料回传已审核;
                    //记录审核日志
                    var log = new ActivityFormLog();
                    log.ActionTime     = DateTime.Now;
                    log.ActivityFormId = activityForm.Id;
                    log.Opinion        = "审核通过";// activityForm.Status.ToString();
                    log.Status         = activityForm.Status;
                    log.StatusName     = activityForm.Status.ToString();
                    log.UserType       = user.UserType;
                    log.UserId         = user.UserId;
                    log.UserName       = user.UserName;

                    await _activityFormRepository.UpdateAsync(activityForm);

                    await _activityFormLogRepository.InsertAsync(log);

                    banquest.Responsible = activityForm.ManagerName;
                    banquest.Executor    = activityForm.ManagerName;
                }

                banquest.UserName     = user.UserName;
                banquest.CreationTime = DateTime.Now;
                if (input.BanquetId.HasValue)
                {
                    banquest.Id = input.BanquetId.Value;
                    await _activitybanquetRepository.UpdateAsync(banquest);
                }
                else
                {
                    await _activitybanquetRepository.InsertAsync(banquest);
                }

                //2、保存推荐人信息
                delivery.Type         = DeliveryUserTypeEnum.推荐人;
                delivery.CreationTime = DateTime.Now;

                if (input.DeliveryId.HasValue)
                {
                    //delivery.Id = input.DeliveryId.Value;
                    var orgDelivery = await _activityDeliveryInfoRepository.GetAsync(input.DeliveryId.Value);

                    orgDelivery.UserName       = delivery.UserName;
                    orgDelivery.Phone          = delivery.Phone;
                    orgDelivery.DeliveryRemark = delivery.DeliveryRemark;
                    orgDelivery.Address        = delivery.Address;
                    await _activityDeliveryInfoRepository.UpdateAsync(orgDelivery);
                }
                else
                {
                    await _activityDeliveryInfoRepository.InsertAsync(delivery);
                }
            }

            if (user.UserType == UserTypeEnum.零售客户)
            {
                return(new APIResultDto()
                {
                    Code = 0, Msg = "资料提交成功,待客户经理审核"
                });
            }
            else
            {
                return(new APIResultDto()
                {
                    Code = 0, Msg = "资料提交成功,待营销中心审核"
                });
            }
        }
예제 #19
0
        protected virtual async Task CreateUserAsync(CreateOrUpdateUserInput input)
        {
            if (AbpSession.TenantId.HasValue)
            {
                await _userPolicy.CheckMaxUserCountAsync(AbpSession.GetTenantId());
            }

            var user = ObjectMapper.Map <User>(input.User); //Passwords is not mapped (see mapping configuration)

            user.TenantId = AbpSession.TenantId;

            //Set password
            if (input.SetRandomPassword)
            {
                var randomPassword = await _userManager.CreateRandomPassword();

                user.Password       = _passwordHasher.HashPassword(user, randomPassword);
                input.User.Password = randomPassword;
            }
            else if (!input.User.Password.IsNullOrEmpty())
            {
                await UserManager.InitializeOptionsAsync(AbpSession.TenantId);

                foreach (var validator in _passwordValidators)
                {
                    CheckErrors(await validator.ValidateAsync(UserManager, user, input.User.Password));
                }

                user.Password = _passwordHasher.HashPassword(user, input.User.Password);
            }

            user.ShouldChangePasswordOnNextLogin = input.User.ShouldChangePasswordOnNextLogin;

            //Assign roles
            user.Roles = new Collection <UserRole>();
            foreach (var roleName in input.AssignedRoleNames)
            {
                var role = await _roleManager.GetRoleByNameAsync(roleName);

                user.Roles.Add(new UserRole(AbpSession.TenantId, user.Id, role.Id));
            }

            CheckErrors(await UserManager.CreateAsync(user));
            await CurrentUnitOfWork.SaveChangesAsync(); //To get new user's Id.

            //Notifications
            await _notificationSubscriptionManager.SubscribeToAllAvailableNotificationsAsync(user.ToUserIdentifier());

            await _appNotifier.WelcomeToTheApplicationAsync(user);

            //Organization Units
            await UserManager.SetOrganizationUnitsAsync(user, input.OrganizationUnits.ToArray());

            //Send activation email
            if (input.SendActivationEmail)
            {
                user.SetNewEmailConfirmationCode();
                await _userEmailer.SendEmailActivationLinkAsync(
                    user,
                    AppUrlService.CreateEmailActivationUrlFormat(AbpSession.TenantId),
                    input.User.Password
                    );
            }
        }
예제 #20
0
        public async Task <RegisterTenantOutput> RegisterTenant(RegisterTenantInput input)
        {
            if (input.EditionId.HasValue)
            {
                await CheckEditionSubscriptionAsync(input.EditionId.Value, input.SubscriptionStartType);
            }
            else
            {
                await CheckRegistrationWithoutEdition();
            }

            using (CurrentUnitOfWork.SetTenantId(null))
            {
                CheckTenantRegistrationIsEnabled();

                if (UseCaptchaOnRegistration())
                {
                    await _recaptchaValidator.ValidateAsync(input.CaptchaResponse);
                }

                //Getting host-specific settings
                var isActive = await IsNewRegisteredTenantActiveByDefault(input.SubscriptionStartType);

                var isEmailConfirmationRequired = await SettingManager.GetSettingValueForApplicationAsync <bool>(
                    AbpZeroSettingNames.UserManagement.IsEmailConfirmationRequiredForLogin
                    );

                DateTime?subscriptionEndDate = null;
                var      isInTrialPeriod     = false;

                if (input.EditionId.HasValue)
                {
                    isInTrialPeriod = input.SubscriptionStartType == SubscriptionStartType.Trial;

                    if (isInTrialPeriod)
                    {
                        var edition = (SubscribableEdition)await _editionManager.GetByIdAsync(input.EditionId.Value);

                        subscriptionEndDate = Clock.Now.AddDays(edition.TrialDayCount ?? 0);
                    }
                }

                var tenantId = await _tenantManager.CreateWithAdminUserAsync(
                    input.TenancyName,
                    input.Name,
                    input.AdminPassword,
                    input.AdminEmailAddress,
                    null,
                    isActive,
                    input.EditionId,
                    shouldChangePasswordOnNextLogin : false,
                    sendActivationEmail : true,
                    subscriptionEndDate,
                    isInTrialPeriod,
                    AppUrlService.CreateEmailActivationUrlFormat(input.TenancyName)
                    );

                var tenant = await TenantManager.GetByIdAsync(tenantId);

                await _appNotifier.NewTenantRegisteredAsync(tenant);

                return(new RegisterTenantOutput
                {
                    TenantId = tenant.Id,
                    TenancyName = input.TenancyName,
                    Name = input.Name,
                    UserName = AbpUserBase.AdminUserName,
                    EmailAddress = input.AdminEmailAddress,
                    IsActive = tenant.IsActive,
                    IsEmailConfirmationRequired = isEmailConfirmationRequired,
                    IsTenantActive = tenant.IsActive
                });
            }
        }
예제 #21
0
 public void CreateProductAndRollback(ProductCreateInput input)
 {
     _productRepository.Insert(ObjectMapper.Map <Product>(input));
     CurrentUnitOfWork.SaveChanges();
     throw new UserFriendlyException("This exception is thrown to rollback the transaction!");
 }
        public virtual async Task RemoveOrganizationUnitsAsync(Guid id, Guid ouId)
        {
            await OrganizationUnitManager.RemoveRoleFromOrganizationUnitAsync(id, ouId);

            await CurrentUnitOfWork.SaveChangesAsync();
        }
        public virtual async Task <ActionResult> Register(RegisterTenantInput model)
        {
            try
            {
                if (UseCaptchaOnRegistration())
                {
                    model.CaptchaResponse = HttpContext.Request.Form[RecaptchaValidator.RecaptchaResponseKey];
                }

                var result = await _tenantRegistrationAppService.RegisterTenant(model);

                CurrentUnitOfWork.SetTenantId(result.TenantId);

                var user = await _userManager.GetAdminAsync();

                //Directly login if possible
                if (result.IsTenantActive &&
                    result.IsActive &&
                    !result.IsEmailConfirmationRequired &&
                    !_webUrlService.SupportsTenancyNameInUrl)
                {
                    var loginResult = await GetLoginResultAsync(user.UserName, model.AdminPassword, model.TenancyName);

                    if (loginResult.Result == AbpLoginResultType.Success)
                    {
                        await _signInManager.SignOutAsync();

                        await _signInManager.SignInAsync(loginResult.Identity, false);

                        SetTenantIdCookie(result.TenantId);

                        return(Redirect(Url.Action("Index", "Home", new { area = "AppName" })));
                    }

                    Logger.Warn("New registered user could not be login. This should not be normally. login result: " + loginResult.Result);
                }

                //Show result page
                var resultModel = ObjectMapper.Map <TenantRegisterResultViewModel>(result);

                resultModel.TenantLoginAddress = _webUrlService.SupportsTenancyNameInUrl
                    ? _webUrlService.GetSiteRootAddress(model.TenancyName).EnsureEndsWith('/') + "Account/Login"
                    : "";

                if (model.SubscriptionStartType == SubscriptionStartType.Paid)
                {
                    return(RedirectToAction("Buy", "Payment", new
                    {
                        tenantId = result.TenantId,
                        editionId = model.EditionId,
                        subscriptionStartType = (int)model.SubscriptionStartType
                    }));
                }

                return(View("RegisterResult", resultModel));
            }
            catch (UserFriendlyException ex)
            {
                ViewBag.UseCaptcha   = UseCaptchaOnRegistration();
                ViewBag.ErrorMessage = ex.Message;

                var viewModel = new TenantRegisterViewModel
                {
                    PasswordComplexitySetting = await _passwordComplexitySettingStore.GetSettingsAsync(),
                    EditionId             = model.EditionId,
                    SubscriptionStartType = model.SubscriptionStartType,
                    EditionPaymentType    = EditionPaymentType.NewRegistration
                };

                if (model.EditionId.HasValue)
                {
                    viewModel.Edition = await _tenantRegistrationAppService.GetEdition(model.EditionId.Value);

                    viewModel.EditionId = model.EditionId.Value;
                }

                return(View("Register", viewModel));
            }
        }
        public async Task ApplyEvaluationTemplate(CreateEvaluationDto input)
        {
            EvaluationTemplates.EvaluationTemplate evaluationTemplate = await
                                                                        EvaluationTemplateRepository
                                                                        .GetAll()
                                                                        .Include(currentEvaluationTemplate => currentEvaluationTemplate.Sections)
                                                                        .ThenInclude(section => section.UnmeasuredQuestions)
                                                                        .Include(currentEvaluationTemplate => currentEvaluationTemplate.Sections)
                                                                        .ThenInclude(section => section.MeasuredQuestions)
                                                                        .Include(currentEvaluationTemplate => currentEvaluationTemplate.Sections)
                                                                        .ThenInclude(section => section.ChildSections)
                                                                        .ThenInclude(section => section.UnmeasuredQuestions)
                                                                        .Include(currentEvaluationTemplate => currentEvaluationTemplate.Sections)
                                                                        .ThenInclude(section => section.ChildSections)
                                                                        .ThenInclude(section => section.MeasuredQuestions)
                                                                        .FirstOrDefaultAsync(currentEvaluationTemplate => currentEvaluationTemplate.Id == input.EvaluationTemplateId);

            if (evaluationTemplate.IsNullOrDeleted())
            {
                throw new UserFriendlyException($"Formato de Evaluacion {input.EvaluationTemplateId} no encontrado.");
            }

            List <User> users = new List <User>();

            foreach (long inputOrganizationUnitId in input.OrganizationUnitIds)
            {
                Abp.Organizations.OrganizationUnit currentOrganizationUnit = await
                                                                             OrganizationUnitRepository.FirstOrDefaultAsync(inputOrganizationUnitId);

                users.AddRange(await UserManager.GetUsersInOrganizationUnit(currentOrganizationUnit, false));
            }

            foreach (User user in users.Distinct())
            {
                Abp.Organizations.OrganizationUnit userOrganizationUnit = (await UserManager.GetOrganizationUnitsAsync(user))
                                                                          .First();

                User supervisor = (await UserManager.GetUsersInOrganizationUnit(userOrganizationUnit, false))
                                  .FirstOrDefault(currentUser =>
                                                  UserManager.IsInRoleAsync(currentUser, StaticRoleNames.Tenants.Supervisor).GetAwaiter()
                                                  .GetResult());

                long?supervisorId = null;

                if (!supervisor.IsNullOrDeleted())
                {
                    supervisorId = supervisor.Id;
                }

                Evaluation currentEvaluation = new Evaluation(
                    input.Name,
                    evaluationTemplate.Id,
                    user.Id,
                    input.StartDate,
                    input.EndDate);

                currentEvaluation.SetRevision(
                    currentEvaluation.EvaluationId,
                    supervisorId.GetValueOrDefault(3),
                    input.EndDate);

                long evaluationId = await EvaluationRepository.InsertAndGetIdAsync(currentEvaluation);

                currentEvaluation = await EvaluationRepository.FirstOrDefaultAsync(evaluationId);



                List <MeasuredQuestion>   measuredQuestions   = new List <MeasuredQuestion>();
                List <UnmeasuredQuestion> unmeasuredQuestions = new List <UnmeasuredQuestion>();

                foreach (Sections.Section evaluationTemplateSection in evaluationTemplate.Sections)
                {
                    measuredQuestions.AddRange(evaluationTemplateSection.MeasuredQuestions);
                    unmeasuredQuestions.AddRange(evaluationTemplateSection.UnmeasuredQuestions);
                }

                foreach (UnmeasuredQuestion unmeasuredQuestion in unmeasuredQuestions)
                {
                    currentEvaluation.Questions.Add(new EvaluationQuestion(
                                                        currentEvaluation.EvaluationId,
                                                        unmeasuredQuestion.Id,
                                                        currentEvaluation.EndDateTime));
                }

                foreach (MeasuredQuestion measuredQuestion in measuredQuestions)
                {
                    currentEvaluation.Questions.Add(new EvaluationQuestion(
                                                        currentEvaluation.EvaluationId,
                                                        measuredQuestion.Id,
                                                        currentEvaluation.EndDateTime));
                }

                foreach (EvaluationQuestion currentEvaluationQuestion in currentEvaluation.Questions)
                {
                    currentEvaluationQuestion.SetAnswer(currentEvaluationQuestion.QuestionId, evaluationId);
                }


                await CurrentUnitOfWork.SaveChangesAsync();
            }
        }
예제 #25
0
 public async Task CreateKeyHolding(CreateKeyHoldingInput input)
 {
     var entity = new KeyHolding(CurrentUnitOfWork.GetTenantId(), input.VisitorName, input.VisiteStartTime, input.VisiteEndTime, input.Password, input.KeyType, input.HomeOwerId, input.CommunityId);
     await _manager.CreateAsync(entity);
 }
        public void UpdateMsItem(UpdateMsItemInput input)
        {
            Logger.Info("UpdateMsItem() - Started.");

            Logger.DebugFormat("UpdateMsItem() - Start checking exiting code, name, and shortName. Params sent:{0}" +
                               "itemCode   ={1}{0}" +
                               "itemName   ={2}{0}" +
                               "shortName  ={3}{0}" +
                               "itemID     ={4}"
                               , Environment.NewLine, input.itemCode, input.itemName, input.shortName, input.Id);
            var checkCodeName = (from x in _lkItemRepo.GetAll()
                                 where x.Id != input.Id && (x.itemCode == input.itemCode || x.itemName == input.itemName || x.shortName == input.shortName)
                                 select x).Any();

            Logger.DebugFormat("UpdateMsItem() - End checking exiting code, name, and shortName. Result:{0}", checkCodeName);

            if (!checkCodeName)
            {
                var getMsItem = (from x in _lkItemRepo.GetAll()
                                 where x.Id == input.Id
                                 select x).FirstOrDefault();

                var updateMsItem = getMsItem.MapTo <LK_Item>();

                updateMsItem.itemName  = input.itemName;
                updateMsItem.itemCode  = input.itemCode;
                updateMsItem.shortName = input.shortName;


                try
                {
                    Logger.DebugFormat("UpdateMsItem() - Start updatae Item. Params sent:{0}" +
                                       "itemCode   = {1}{0}" +
                                       "itemName   = {2}{0}" +
                                       "shortName  = {3}"
                                       , Environment.NewLine, input.itemCode, input.itemName, input.shortName);
                    _lkItemRepo.Update(updateMsItem);
                    CurrentUnitOfWork.SaveChanges();
                    Logger.DebugFormat("UpdateMsItem() - End update item.");
                }

                /*catch (DbEntityValidationException ex)
                 * {
                 *  var errorMessages = ex.EntityValidationErrors
                 *                          .SelectMany(x => x.ValidationErrors)
                 *                          .Select(x => x.ErrorMessage);
                 *  string fullErrorMessage = string.Join("; ", errorMessages);
                 *  string exceptionMessage = string.Concat("Validation Error: ", fullErrorMessage);
                 *  Logger.ErrorFormat("UpdateMsItem() ERROR DbEntityValidationException. Result = {0}", exceptionMessage);
                 *  throw new UserFriendlyException(exceptionMessage);
                 * }*/
                // Handle data errors.
                catch (DataException exDb)
                {
                    Logger.ErrorFormat("UpdateMsItem() ERROR DataException. Result = {0}", exDb.Message);
                    throw new UserFriendlyException("Database Error : {0}", exDb.Message);
                }
                // Handle all other exceptions.
                catch (Exception ex)
                {
                    Logger.ErrorFormat("UpdateMsItem() ERROR Exception. Result = {0}", ex.Message);
                    throw new UserFriendlyException("Error : {0}", ex.Message);
                }
            }
            else
            {
                Logger.ErrorFormat("CreateOrUpdateMsSchemaRequirement() ERROR. Result = {0}", "Item Code or Item Name or Short Name Already Exist!");
                throw new UserFriendlyException("Item Code or Item Name or Short Name Already Exist!");
            }
            Logger.Info("UpdateMsItem() - Finished.");
        }
예제 #27
0
        private async Task BuildForInternalAsync(Tenant tenant)
        {
            //Create Organization Units

            var organizationUnits = new List <OrganizationUnit>();

            var producing = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Producing");

            var researchAndDevelopment = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Research & Development", producing);

            var ivrProducts = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "IVR Related Products", researchAndDevelopment);

            var voiceTech = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Voice Technologies", researchAndDevelopment);

            var inhouseProjects = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Inhouse Projects", researchAndDevelopment);

            var qualityManagement = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Quality Management", producing);

            var testing = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Testing", producing);

            var selling = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Selling");

            var marketing = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Marketing", selling);

            var sales = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Sales", selling);

            var custRelations = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Customer Relations", selling);

            var supporting = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Supporting");

            var buying = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Buying", supporting);

            var humanResources = await CreateAndSaveOrganizationUnit(organizationUnits, tenant, "Human Resources", supporting);

            //Create users

            var users = _randomUserGenerator.GetRandomUsers(RandomHelper.GetRandom(12, 26), tenant.Id);

            foreach (var user in users)
            {
                //Create the user
                await _userManager.CreateAsync(user);

                await CurrentUnitOfWork.SaveChangesAsync();

                //Add to roles
                await _userManager.AddToRoleAsync(user, StaticRoleNames.Tenants.User);

                //Add to OUs
                var randomOus = RandomHelper.GenerateRandomizedList(organizationUnits).Take(RandomHelper.GetRandom(0, 3));
                foreach (var ou in randomOus)
                {
                    await _userManager.AddToOrganizationUnitAsync(user, ou);
                }

                //Set profile picture
                if (RandomHelper.GetRandom(100) < 70) //A user will have a profile picture in 70% probability.
                {
                    await SetRandomProfilePictureAsync(user);
                }
            }

            //Set a picture to admin!
            var admin = await _userManager.GetAdminAsync();

            await SetRandomProfilePictureAsync(admin);

            //Create Friendships
            var friends = RandomHelper.GenerateRandomizedList(users).Take(3).ToList();

            foreach (var friend in friends)
            {
                await _friendshipManager.CreateFriendshipAsync(
                    new Friendship(
                        admin.ToUserIdentifier(),
                        friend.ToUserIdentifier(),
                        tenant.TenancyName,
                        friend.UserName,
                        friend.ProfilePictureId,
                        FriendshipState.Accepted)
                    );

                await _friendshipManager.CreateFriendshipAsync(
                    new Friendship(
                        friend.ToUserIdentifier(),
                        admin.ToUserIdentifier(),
                        tenant.TenancyName,
                        admin.UserName,
                        admin.ProfilePictureId,
                        FriendshipState.Accepted)
                    );
            }

            //Create chat message
            var friendWithMessage = RandomHelper.GenerateRandomizedList(friends).First();
            var sharedMessageId   = Guid.NewGuid();

            _chatMessageRepository.InsertAndGetId(
                new ChatMessage(
                    friendWithMessage.ToUserIdentifier(),
                    admin.ToUserIdentifier(),
                    ChatSide.Sender,
                    L("Demo_SampleChatMessage"),
                    ChatMessageReadState.Read,
                    sharedMessageId,
                    ChatMessageReadState.Unread
                    )
                );

            _chatMessageRepository.InsertAndGetId(
                new ChatMessage(
                    admin.ToUserIdentifier(),
                    friendWithMessage.ToUserIdentifier(),
                    ChatSide.Receiver,
                    L("Demo_SampleChatMessage"),
                    ChatMessageReadState.Unread,
                    sharedMessageId,
                    ChatMessageReadState.Read
                    )
                );
        }
        public void CreateMsItem(CreateMsItemInput input)
        {
            Logger.Info("CreateMsItem() - Started.");

            Logger.DebugFormat("CreateMsItem() - Start checking exiting code, name, and shortName. Params sent:{0}" +
                               "itemCode   ={1}{0}" +
                               "itemName   ={2}{0}" +
                               "shortName  ={3}"
                               , Environment.NewLine, input.itemCode, input.itemName, input.shortName);
            var checkCodeName = (from x in _lkItemRepo.GetAll()
                                 where x.itemCode == input.itemCode || x.itemName == input.itemName || x.shortName == input.shortName
                                 select x).Any();

            Logger.DebugFormat("CreateMsItem() - End checking exiting code, name, and shortName. Result:{0}", checkCodeName);

            if (!checkCodeName)
            {
                var createMsItem = new LK_Item
                {
                    itemName   = input.itemName,
                    itemCode   = input.itemCode,
                    shortName  = input.shortName,
                    sortNo     = 0,     //hardcode for not null field
                    isOption   = false, //hardcode for not null field
                    optionSort = 0      //hardcode for not null field
                };


                try
                {
                    Logger.DebugFormat("CreateMsItem() - Start update Item. Parameters sent:{0}" +
                                       "itemName    = {1}{0}" +
                                       "itemCode    = {2}{0}" +
                                       "shortName   = {3}{0}" +
                                       "sortNo      = {4}{0}" +
                                       "isOption    = {5}{0}" +
                                       "optionSort  = {6}"
                                       , Environment.NewLine, input.itemName, input.itemCode, input.shortName, 0, false, 0);
                    _lkItemRepo.Insert(createMsItem);
                    CurrentUnitOfWork.SaveChanges();
                    Logger.DebugFormat("CreateMsItem() - End update Item.");
                }

                /*catch (DbEntityValidationException ex)
                 * {
                 *  var errorMessages = ex.EntityValidationErrors
                 *                          .SelectMany(x => x.ValidationErrors)
                 *                          .Select(x => x.ErrorMessage);
                 *  string fullErrorMessage = string.Join("; ", errorMessages);
                 *  string exceptionMessage = string.Concat("Validation Error: ", fullErrorMessage);
                 *  Logger.ErrorFormat("CreateMsItem() ERROR DbEntityValidationException. Result = {0}", exceptionMessage);
                 *  throw new UserFriendlyException(exceptionMessage);
                 * }*/
                // Handle data errors.
                catch (DataException exDb)
                {
                    Logger.ErrorFormat("CreateMsItem() ERROR DbException. Result = {0}", exDb.Message);
                    throw new UserFriendlyException("Database Error : {0}", exDb.Message);
                }
                // Handle all other exceptions.
                catch (Exception ex)
                {
                    Logger.ErrorFormat("CreateMsItem() ERROR DbException. Result = {0}", ex.Message);
                    throw new UserFriendlyException("Error : {0}", ex.Message);
                }
            }
            else
            {
                Logger.ErrorFormat("CreateMsItem() ERROR. Result = {0}", "Item Code or Item Name or Short Name Already Exist!");
                throw new UserFriendlyException("Item Code or Item Name or Short Name Already Exist!");
            }
            Logger.Info("CreateMsItem() - Finished.");
        }
예제 #29
0
        public void UpdateMsAccount(UpdateMsAccountInputDto input)
        {
            Logger.Info("UpdateMsAccountPaymentPayment() - Started.");

            Logger.DebugFormat("UpdateMsAccountPayment() - Start get data before update Account. Parameters sent:{0}" +
                               "accID = {1}{0}"
                               , Environment.NewLine, input.accID);

            var getAccount = (from A in _msAccountRepo.GetAll()
                              where input.accID == A.Id
                              select A).FirstOrDefault();

            Logger.DebugFormat("UpdateMsAccountPayment() - Ended get data before update Account.");

            var UpdateMsAccountPayment = getAccount.MapTo <MS_Account>();

            UpdateMsAccountPayment.NATURE_ACCOUNT_BANK = input.natureAccountBank;
            UpdateMsAccountPayment.NATURE_ACCOUNT_DEP  = input.natureAccountDep;
            UpdateMsAccountPayment.ORG_ID      = input.org;
            UpdateMsAccountPayment.PROVINCE_ID = input.province;
            UpdateMsAccountPayment.isActive    = input.isActive;

            try
            {
                Logger.DebugFormat("UpdateMsAccountPayment() - Start update Account in MS Account. Parameters sent:{0}" +
                                   "natureAccountBank  = {1}{0}" +
                                   "natureAccountDep   = {2}{0}" +
                                   "org                = {3}{0}" +
                                   "province           = {4}{0}" +
                                   "isActive           = {5}{0}"
                                   , Environment.NewLine, input.natureAccountBank, input.natureAccountDep, input.org, input.province, input.isActive);

                _msAccountRepo.Update(UpdateMsAccountPayment);
                CurrentUnitOfWork.SaveChanges();

                Logger.DebugFormat("UpdateMsAccountPayment() - End update Account in MS Account.");

                if (input.emailTo != null)
                {
                    var dataAccountEmail = new CreateUpdateMsAccountEmailInputDto
                    {
                        accID   = input.accID,
                        emailTo = input.emailTo,
                        emailCc = input.emailCc
                    };

                    Logger.DebugFormat("UpdateMsAccountPayment() - Start update Account in MS Account Email. Parameters sent:{0}" +
                                       "accID      = {1}{0}" +
                                       "emailTo    = {2}{0}" +
                                       "emailCc    = {3}{0}"
                                       , Environment.NewLine, input.accID, input.emailTo, input.emailCc);

                    CreateOrUpdateAccountEmail(dataAccountEmail);

                    Logger.DebugFormat("UpdateMsAccountPayment() - End update Account in MS Account Email.");
                }
            }
            catch (DataException ex)
            {
                Logger.ErrorFormat("UpdateMsAccountPayment() - ERROR DataException. Result = {0}", ex.Message);
                throw new UserFriendlyException("Db Error: " + ex.Message);
            }
            catch (Exception ex)
            {
                Logger.ErrorFormat("UpdateMsAccountPayment() - ERROR Exception. Result = {0}", ex.Message);
                throw new UserFriendlyException("Error: " + ex.Message);
            }

            Logger.Info("UpdateMsAccountPayment() - Finished.");
        }
예제 #30
0
        public virtual async Task <ActionResult> Register(RegisterViewModel model)
        {
            try
            {
                //Get tenancy name and tenant
                if (!_multiTenancyConfig.IsEnabled)
                {
                    model.TenancyName = Tenant.DefaultTenantName;
                }
                else if (model.TenancyName.IsNullOrEmpty())
                {
                    throw new UserFriendlyException(L("TenantNameCanNotBeEmpty"));
                }

                CurrentUnitOfWork.SetTenantId(null);

                var tenant = await GetActiveTenantAsync(model.TenancyName);

                CurrentUnitOfWork.SetTenantId(tenant.Id);

                //Create user
                var user = new User
                {
                    TenantId     = tenant.Id,
                    Name         = model.Name,
                    Surname      = model.Surname,
                    EmailAddress = model.EmailAddress,
                    IsActive     = true
                };

                //Get external login info if possible
                ExternalLoginUserInfo externalLoginInfo = null;
                if (model.IsExternalLogin)
                {
                    externalLoginInfo = await HttpContext.Authentication.GetExternalLoginUserInfo(model.ExternalLoginAuthSchema);

                    if (externalLoginInfo == null)
                    {
                        throw new ApplicationException("Can not external login!");
                    }

                    user.Logins = new List <UserLogin>
                    {
                        new UserLogin
                        {
                            LoginProvider = externalLoginInfo.LoginInfo.LoginProvider,
                            ProviderKey   = externalLoginInfo.LoginInfo.ProviderKey,
                            TenantId      = tenant.Id
                        }
                    };

                    model.UserName = model.UserName;
                    model.Password = Users.User.CreateRandomPassword();

                    if (string.Equals(externalLoginInfo.EmailAddress, model.EmailAddress, StringComparison.InvariantCultureIgnoreCase))
                    {
                        user.IsEmailConfirmed = true;
                    }
                }
                else
                {
                    if (model.UserName.IsNullOrEmpty() || model.Password.IsNullOrEmpty())
                    {
                        throw new UserFriendlyException(L("FormIsNotValidMessage"));
                    }
                }

                user.UserName = model.UserName;
                user.Password = new PasswordHasher().HashPassword(model.Password);

                //Add default roles
                user.Roles = new List <UserRole>();
                foreach (var defaultRole in await _roleManager.Roles.Where(r => r.IsDefault).ToListAsync())
                {
                    user.Roles.Add(new UserRole {
                        RoleId = defaultRole.Id
                    });
                }

                //Save user
                CheckErrors(await _userManager.CreateAsync(user));
                await _unitOfWorkManager.Current.SaveChangesAsync();

                //Directly login if possible
                if (user.IsActive)
                {
                    AbpLoginResult <Tenant, User> loginResult;
                    if (externalLoginInfo != null)
                    {
                        loginResult = await _logInManager.LoginAsync(externalLoginInfo.LoginInfo, tenant.TenancyName);
                    }
                    else
                    {
                        loginResult = await GetLoginResultAsync(user.UserName, model.Password, tenant.TenancyName);
                    }

                    if (loginResult.Result == AbpLoginResultType.Success)
                    {
                        await SignInAsync(loginResult.User, loginResult.Identity);

                        return(Redirect(Url.Action("Index", "Home")));
                    }

                    Logger.Warn("New registered user could not be login. This should not be normally. login result: " + loginResult.Result);
                }

                //If can not login, show a register result page
                return(View("RegisterResult", new RegisterResultViewModel
                {
                    TenancyName = tenant.TenancyName,
                    NameAndSurname = user.Name + " " + user.Surname,
                    UserName = user.UserName,
                    EmailAddress = user.EmailAddress,
                    IsActive = user.IsActive
                }));
            }
            catch (UserFriendlyException ex)
            {
                ViewBag.IsMultiTenancyEnabled = _multiTenancyConfig.IsEnabled;
                ViewBag.ErrorMessage          = ex.Message;

                return(View("Register", model));
            }
        }