123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- package services
- import (
- "errors"
- "hongze/hz_crm_api/models"
- "hongze/hz_crm_api/models/system"
- "hongze/hz_crm_api/utils"
- "strconv"
- "time"
- )
- const (
- TodoButtonColorDoing = "red"
- TodoButtonColorDefault = "gray"
- TodoButtonColorCompleted = "green"
- )
- // GetEnglishCompanyTodoAuthRole 获取可操作英文客户TODO的角色列表
- func GetEnglishCompanyTodoAuthRole() []string {
- return []string{
- utils.ROLE_TYPE_CODE_ADMIN, // 管理员
- utils.ROLE_TYPE_CODE_FICC_ADMIN, // FICC管理员
- utils.ROLE_TYPE_CODE_FICC_DEPARTMENT, // FICC部门经理
- utils.ROLE_TYPE_CODE_FICC_GROUP, // FICC销售主管
- utils.ROLE_TYPE_CODE_FICC_TEAM, // FICC销售组长
- utils.ROLE_TYPE_CODE_FICC_SELLER, // FICC销售
- utils.ROLE_TYPE_CODE_FICC_RESEARCHR, // ficc研究员
- }
- }
- // CheckEnglishCompanyTodoAuth 校验当前用户对客户的操作(新增/编辑)权限
- func CheckEnglishCompanyTodoAuth(sysUser *system.Admin, sellerInfo *system.Admin) (ok bool, errMsg string, err error) {
- // 是否有权限添加/编辑任务
- roleCode := sysUser.RoleTypeCode
- authList := GetEnglishCompanyTodoAuthRole()
- if !utils.InArrayByStr(authList, roleCode) {
- errMsg = "账号角色异常,不允许操作"
- return
- }
- // 销售仅能操作自己的客户
- if roleCode == utils.ROLE_TYPE_CODE_FICC_SELLER && sellerInfo.AdminId != sysUser.AdminId {
- errMsg = "该客户不是当前账号所属,不允许操作"
- return
- }
- // 判断销售主管、组长权限, 其余管理员角色不做限制
- switch roleCode {
- case utils.ROLE_TYPE_CODE_FICC_GROUP:
- same, e := CheckAdminIsSameBigGroup(sysUser, sellerInfo)
- if e != nil {
- errMsg = "保存失败"
- err = errors.New("判断主管与客户所属销售是否属于同一大组失败, Err: " + e.Error())
- return
- }
- if !same {
- errMsg = "该客户销售不是当前账号所属组员,不允许操作"
- return
- }
- case utils.ROLE_TYPE_CODE_FICC_TEAM:
- if sellerInfo.GroupId != sysUser.GroupId {
- errMsg = "该客户销售不是当前账号所属组员,不允许操作"
- return
- }
- }
- ok = true
- return
- }
- // GetEnglishCompanyListTodoMap 获取英文客户列表TODO相关信息
- func GetEnglishCompanyListTodoMap(companyList []*models.EnglishCompanyListItem, sysUser *system.Admin) (todoMap map[int]*models.EnglishCompanyListTodo) {
- todoMap = make(map[int]*models.EnglishCompanyListTodo, 0)
- if len(companyList) == 0 || sysUser == nil {
- return
- }
- nowTime := time.Now().Local()
- todayTime := time.Date(nowTime.Year(), nowTime.Month(), nowTime.Day(), 0, 0, 0, 0, time.Local)
- for i := range companyList {
- c := companyList[i]
- v := new(models.EnglishCompanyListTodo)
- v.TodoButtonColor = TodoButtonColorDefault
- v.HiddenConfirm = true // 默认隐藏完成按钮
- if c.TodoStatusStr != models.EnglishCompanyTodoStatusNull {
- // 已完成
- if c.TodoStatusStr == models.EnglishCompanyTodoStatusCompleted {
- v.TodoButtonColor = TodoButtonColorCompleted
- }
- // 进行中
- if c.TodoStatusStr == models.EnglishCompanyTodoStatusDoing {
- v.TodoStatus = true
- v.TodoButtonColor = TodoButtonColorDoing
- //v.TodoEndTime = td.EndTime
- v.TodoEndTimeStr = c.TodoEndTime.Format(utils.FormatDate)
- // 截止目前还剩余的天数
- todoEndTime := time.Date(c.TodoEndTime.Year(), c.TodoEndTime.Month(), c.TodoEndTime.Day(), 0, 0, 0, 0, time.Local)
- deadline := int(todoEndTime.Sub(todayTime).Hours() / 24)
- v.Deadline = strconv.Itoa(deadline)
- }
- // 根据当前角色判断按钮权限
- switch sysUser.RoleTypeCode {
- case utils.ROLE_TYPE_CODE_ADMIN, utils.ROLE_TYPE_CODE_FICC_ADMIN, utils.ROLE_TYPE_CODE_FICC_DEPARTMENT, utils.ROLE_TYPE_CODE_FICC_GROUP, utils.ROLE_TYPE_CODE_FICC_RESEARCHR:
- v.HiddenConfirm = false
- if c.TodoStatusStr == models.EnglishCompanyTodoStatusDoing {
- v.CanConfirm = true
- }
- case utils.ROLE_TYPE_CODE_FICC_TEAM:
- // 组长不是自己的客户则展示完成按钮
- if c.SellerId != sysUser.AdminId {
- v.HiddenConfirm = false
- }
- if c.TodoStatusStr == models.EnglishCompanyTodoStatusDoing {
- v.CanConfirm = true
- }
- }
- }
- todoMap[c.CompanyId] = v
- }
- return
- }
|