Exemple #1
0
def upload_card_merchant_qualification(
        appid, name, logo_media_id, business_license_media_id,
        agreement_file_media_id, operator_id_card_media_id,
        primary_category_id, secondary_category_id, component_access_token):
    category_url = "http://api.weixin.qq.com/cgi-bin/component/upload_card_merchant_qualification?access_token=" + component_access_token
    category_data = {
        "appid": appid,
        "name": name,
        "logo_media_id": logo_media_id,
        "business_license_media_id": business_license_media_id,
        "agreement_file_media_id": agreement_file_media_id,
        "operator_id_card_media_id": operator_id_card_media_id,
        "primary_category_id": primary_category_id,
        "secondary_category_id": secondary_category_id
    }
    req = urllib2.Request(
        category_url,
        json.dumps(category_data, ensure_ascii=False).encode('utf8'))
    req.add_header("Content-Type", "application/json")
    response = urllib2.urlopen(req)
    html = response.read().decode("utf-8")
    logger.debug('html:' + html)
    tokeninfo = json.loads(html)
    print tokeninfo
    if "errcode" in tokeninfo:
        if tokeninfo['errcode'] == 0:
            pass
        else:
            raise osv.except_osv(_('Error!'), _('提交子商户资质出错'))
    else:
        raise osv.except_osv(_('Error!'), _('提交子商户资质出错'))
Exemple #2
0
def upload_card_agent_qualification(register_capital,
                                    business_license_media_id,
                                    tax_registration_certificate_media_id,
                                    last_quarter_tax_listing_media_id,
                                    component_access_token):
    category_url = "http://api.weixin.qq.com/cgi-bin/component/upload_card_agent_qualification?access_token=" + component_access_token
    category_data = {
        "register_capital": register_capital,
        "business_license_media_id": business_license_media_id,
        "tax_registration_certificate_media_id":
        tax_registration_certificate_media_id,
        "last_quarter_tax_listing_media_id": last_quarter_tax_listing_media_id
    }
    req = urllib2.Request(
        category_url,
        json.dumps(category_data, ensure_ascii=False).encode('utf8'))
    req.add_header("Content-Type", "application/json")
    response = urllib2.urlopen(req)
    html = response.read().decode("utf-8")
    logger.debug('html:' + html)
    tokeninfo = json.loads(html)
    print tokeninfo
    if "errcode" in tokeninfo:
        if tokeninfo['errcode'] == 0:
            pass
        else:
            raise osv.except_osv(_('Error!'), _('提交母商户资质出错'))
    else:
        raise osv.except_osv(_('Error!'), _('提交母商户资质出错'))
Exemple #3
0
 def move_line_get_item(self, cr, uid, line, context=None):
     company = line.expense_id.company_id
     property_obj = self.pool.get('ir.property')
     if line.product_id:
         acc = line.product_id.property_account_expense
         if not acc:
             acc = line.product_id.categ_id.property_account_expense_categ
         if not acc:
             raise osv.except_osv(
                 _('Error!'),
                 _('No purchase account found for the product %s (or for his category), please configure one.'
                   ) % (line.product_id.name))
     else:
         acc = property_obj.get(cr,
                                uid,
                                'property_account_expense_categ',
                                'product.category',
                                context={'force_company': company.id})
         if not acc:
             raise osv.except_osv(
                 _('Error!'),
                 _('Please configure Default Expense account for Product purchase: `property_account_expense_categ`.'
                   ))
     return {
         'type': 'src',
         'name': line.name.split('\n')[0][:64],
         'price_unit': line.unit_amount,
         'quantity': line.unit_quantity,
         'price': line.total_amount,
         'account_id': acc.id,
         'product_id': line.product_id.id,
         'uos_id': line.uom_id.id,
         'account_analytic_id': line.analytic_account.id,
     }
Exemple #4
0
 def del_custom_menu(self):
     print self
     if self.menuid:
         if self.officalaccount.is_auth_officialaccount:
             auth_access_token = public_sdk.get_authorizer_access_token(
                 self.officalaccount.wx_appid,
                 self.officalaccount.auth_component.auth_component_appid,
                 self.officalaccount.auth_component.
                 auth_component_appsecret,
                 self.officalaccount.authorizer_refresh_token)
             menuresult = menu_manager.delete_addconditonal_menu_access_token(
                 self.menuid, auth_access_token)
             pass
         else:
             menuManager = menu_manager.menu_manager(
                 self.officalaccount.wx_appid,
                 self.officalaccount.wx_appsecret)
             menuresult = menuManager.delete_addconditional_menu(
                 self.menuid)
         print menuresult
         if 'errcode' in menuresult:
             if menuresult['errcode'] == 0:
                 self.menuid = False
                 self._cr.commit()
                 raise except_osv(_('Info!'), _(u"删除个性化菜单成功"))
             else:
                 result = "删除个性化菜单失败:" + str(
                     menuresult['errcode']) + "," + menuresult['errmsg']
                 raise except_osv(_('Error!'), _(result))
     else:
         raise except_osv(_('Error!'), _(u"未创建个性化菜单,不能删除!"))
Exemple #5
0
    def _validate_approval(self):
        '''
        功能:校验是否可以进行批准与拒绝
        :return:
        '''
        try:
            user_approval_level=self._get_current_approval_level()['approval_levels_int']
            str_user_approval_level=''
            for level in user_approval_level:
                str_user_approval_level+=str(level+1)+','
            if len(str_user_approval_level)>0:
                str_user_approval_level=str_user_approval_level[:-1]
            _logger.info('当前用户可审批%s等级的费用')
            current_approval_level=self.current_approval_level
            if current_approval_level not in user_approval_level:
                msg='目前应由%s级审批人处理,您是%s级审批人,不允许进行“批准”或“拒绝”操作!' % (current_approval_level+1,str_user_approval_level)
                raise except_osv(('错误'), (msg))
            else:
                return user_approval_level

        except Exception as e:
            err_msg=e.message
            if hasattr(e,'value'):
                err_msg+=e.value
            raise except_osv(('错误'), (err_msg))
Exemple #6
0
 def create_custom_menu(self):
     print self
     code = self.code
     officalaccount = self.officalaccount.id
     if code:
         print code
         print officalaccount
         if self.menuid:
             raise except_osv(_('Error!'), _(u"已经创建微信个性化菜单,不能再次创建"))
         custom_menu = self.pool.get(
             'wx.officialaccount_menu').get_custom_menu(
                 self._cr, self._uid, self._context, code, officalaccount)
         print custom_menu
         matchrule = {}
         if self.sex:
             matchrule.update({"sex": self.sex})
         # if self.group_id:
         #     matchrule.update({
         #         "group_id":self.group_id['groupid']
         #     })
         if self.client_platform_type:
             matchrule.update(
                 {"client_platform_type": self.client_platform_type})
         if self.country:
             matchrule.update({"country": self.country})
         if self.province:
             matchrule.update({"province": self.province})
         if self.city:
             matchrule.update({"city": self.city})
         menudata = "{" + custom_menu + "," + "\"matchrule\":" + json.dumps(
             matchrule, ensure_ascii=False) + "}"
         print menudata
         if self.officalaccount.is_auth_officialaccount:
             auth_access_token = public_sdk.get_authorizer_access_token(
                 self.officalaccount.wx_appid,
                 self.officalaccount.auth_component.auth_component_appid,
                 self.officalaccount.auth_component.
                 auth_component_appsecret,
                 self.officalaccount.authorizer_refresh_token)
             menuresult = menu_manager.create_addconditional_menu_access_token(
                 menudata, auth_access_token)
             pass
         else:
             menuManager = menu_manager.menu_manager(
                 self.officalaccount.wx_appid,
                 self.officalaccount.wx_appsecret)
             menuresult = menuManager.create_addconditional_menu(menudata)
         if 'errcode' in menuresult:
             result = "创建个性化菜单失败:" + str(
                 menuresult['errcode']) + "," + menuresult['errmsg']
             raise except_osv(_('Error!'), _(result))
             pass
         else:
             menuid = menuresult['menuid']
             self.menuid = menuid
         print menuresult
Exemple #7
0
    def action_generate_saas_product(self):
        '''
        功能:按照saas方案展开销售订单行
        :return:
        '''
        try:
            for order in self:
                if not self.saas_plan:
                    _logger.info('没有维护产品线!')
                    raise except_osv(('提示'), ('还未维护产品线,无法创建订单行!'))
                else:
                    _logger.info('销售订单:%s 关联的saas方案=%s' %
                                 (order.name, order.saas_plan.name))
                    saas_plan_id = order.saas_plan.id
                    sql_str = '''
                            select product_product_id from saas_portal_module where id in(
                                        select module_id from saas_portal_plan_module where plan_id=%s)
                            ''' % saas_plan_id

                    _logger.info('根据saas.plan获取关联的各module对应产品ID的SQL=%s' %
                                 sql_str)
                    self._cr.execute(sql_str)
                    res = self._cr.fetchall()
                    order_line = []
                    for r in res:
                        product_obj = self.env['product.product'].sudo(
                        ).search([('id', '=', r[0])])
                        product_value = {}
                        product_value['name'] = product_obj.name
                        product_value['product_id'] = product_obj.id
                        product_value['product_uom'] = 1
                        product_value['product_uom_qty'] = 1
                        product_value['price_unit'] = product_obj.list_price
                        product_value['state'] = 'draft'
                        product_value['categ_id'] = product_obj.categ_id.id
                        product_value['must_choose'] = product_obj.must_choose

                        # order.order_line |= order.order_line.new(product_value) #不持久化,先加载到Grid上
                        order_line.append([0, False, product_value])
                    order.write({'order_line': order_line})

        except Exception as e:
            err_msg = '生成订单行异常,%s' % e.message
            err_err = None
            if hasattr(e, 'value'):
                err_err = e.value
            err = err_msg or err_err
            _logger.error(err)
            raise except_osv(('错误'), (err))
def get_corp_access_token(suite_access_token, suite_id, auth_corpid, permanent_code):
    key = suite_id + auth_corpid + "access_token"
    access_token = cache.redis.get(key)
    if access_token == None:
        category_url = "https://qyapi.weixin.qq.com/cgi-bin/service/get_corp_token?suite_access_token=" + suite_access_token
        category_data = {
            "suite_id": suite_id,
            "auth_corpid": auth_corpid,
            "permanent_code": permanent_code
        }
        req = urllib2.Request(category_url, json.dumps(category_data, ensure_ascii=False).encode('utf8'))
        req.add_header("Content-Type", "application/json")
        response = urllib2.urlopen(req)
        html = response.read().decode("utf-8")
        logger.debug('html:' + html)
        tokeninfo = json.loads(html)
        print tokeninfo
        if 'errcode' not in tokeninfo:
            access_token = tokeninfo['access_token']
            cache.redis.set(key, access_token, 7100)
            return access_token
        else:
            raise osv.except_osv(_('Error!'), _('获取企业号授权信息出错'))
    else:
        return access_token
Exemple #9
0
    def write(self, vals):
        '''
        功能:员工代号不能重复
        :param vals:
        :return:
        '''
        try:
            for employee in self:
                code = vals.get('code', False)
                if code:
                    exis_emps = self.env['hr.employee'].search([
                        ('code', '=', code), ('id', '!=', employee.id)
                    ])
                    if len(exis_emps) > 0:
                        exis_emp_names = ''
                        for exis_emp in exis_emps:
                            exis_emp_names = exis_emp_names + exis_emp.name + ','
                        msg = '员工代号%s重复(具有该员工代号的员工有%s)!' % (
                            code, exis_emp_names[0:-1])
                        raise except_osv(_('错误'), _(msg))
                return super(hr_employee, employee).write(vals)

        except Exception as e:
            _logger.error(e)
            raise e
Exemple #10
0
    def account_move_get(self, cr, uid, expense_id, context=None):
        '''
        This method prepare the creation of the account move related to the given expense.

        :param expense_id: Id of expense for which we are creating account_move.
        :return: mapping between fieldname and value of account move to create
        :rtype: dict
        '''
        journal_obj = self.pool.get('account.journal')
        expense = self.browse(cr, uid, expense_id, context=context)
        company_id = expense.company_id.id
        date = expense.date_confirm
        ref = expense.name
        journal_id = False
        if expense.journal_id:
            journal_id = expense.journal_id.id
        else:
            journal_id = journal_obj.search(cr, uid,
                                            [('type', '=', 'purchase'),
                                             ('company_id', '=', company_id)])
            if not journal_id:
                raise osv.except_osv(
                    _('Error!'),
                    _("No expense journal found. Please make sure you have a journal with type 'purchase' configured."
                      ))
            journal_id = journal_id[0]
        return self.pool.get('account.move').account_move_prepare(
            cr,
            uid,
            journal_id,
            date=date,
            ref=ref,
            company_id=company_id,
            context=context)
def send_file_session(access_token, send_user, MediaID, receiver_type, receiver_id):
    category_url = "https://qyapi.weixin.qq.com/cgi-bin/chat/send?access_token=" + access_token
    category_data = {
        "receiver":
            {
                "type": receiver_type,
                "id": receiver_id
            },
        "sender": send_user,
        "msgtype": "file",
        "file":
            {
                "media_id": MediaID
            }
    }
    req = urllib2.Request(category_url, json.dumps(category_data, ensure_ascii=False).encode('utf8'))
    req.add_header("Content-Type", "application/json")
    response = urllib2.urlopen(req)
    html = response.read().decode("utf-8")
    logger.debug('html:' + html)
    tokeninfo = json.loads(html)
    print tokeninfo
    if tokeninfo['errcode'] == 0:
        return True
    else:
        raise osv.except_osv(_('Error!'), _('发送文本消息出错'))
Exemple #12
0
 def batch_sync_product(self, cr, uid, ids, context=None):
     '''
     功能:
     :param cr:
     :param uid:
     :param ids:
     :param context:
     :return:
     '''
     result_success = ""
     result_error = ""
     for id in ids:
         try:
             wx_product = self.browse(cr, uid, id, context=context)
             if wx_product.state in ('released'):
                 isSuccess = wx_product.sync_product(False)
                 if isSuccess:
                     result_success = result_success + wx_product.oe_product.name + ','
                 else:
                     result_error = result_error + wx_product.oe_product.name + ','
             else:
                 _logger.debug("%s 不是'已发布'状态,不允许同步" % wx_product.name)
         except Exception as e:
             print e
             _logger.error(e)
     result_success = result_success[:-1]
     result_error = result_error[:-1]
     result_msg = ""
     if result_success != "":
         result_msg += "同步成功的商品:" + result_success
     if result_error != "":
         result_msg += "\n同步失败的商品:" + result_error
     _logger.debug(result_msg)
     # 提示
     raise except_osv(_('提示'), _(result_msg))
Exemple #13
0
 def _set_remaining_days(self,
                         cr,
                         uid,
                         empl_id,
                         name,
                         value,
                         arg,
                         context=None):
     if value:
         employee = self.browse(cr, uid, empl_id, context=context)
         diff = value - employee.remaining_leaves
         type_obj = self.pool.get('hr.holidays.status')
         holiday_obj = self.pool.get('hr.holidays')
         # Find for holidays status
         status_ids = type_obj.search(cr,
                                      uid, [('limit', '=', False)],
                                      context=context)
         if len(status_ids) != 1:
             raise osv.except_osv(
                 _('Warning!'),
                 _("The feature behind the field 'Remaining Legal Leaves' can only be used when there is only one leave type with the option 'Allow to Override Limit' unchecked. (%s Found). Otherwise, the update is ambiguous as we cannot decide on which leave type the update has to be done. \nYou may prefer to use the classic menus 'Leave Requests' and 'Allocation Requests' located in 'Human Resources \ Leaves' to manage the leave days of the employees if the configuration does not allow to use this field."
                   ) % (len(status_ids)))
         status_id = status_ids and status_ids[0] or False
         if not status_id:
             return False
         if diff > 0:
             leave_id = holiday_obj.create(
                 cr,
                 uid, {
                     'name': _('Allocation for %s') % employee.name,
                     'employee_id': employee.id,
                     'holiday_status_id': status_id,
                     'type': 'add',
                     'holiday_type': 'employee',
                     'number_of_days_temp': diff
                 },
                 context=context)
         elif diff < 0:
             raise osv.except_osv(
                 _('Warning!'),
                 _('You cannot reduce validated allocation requests'))
         else:
             return False
         for sig in ('confirm', 'validate', 'second_validate'):
             holiday_obj.signal_workflow(cr, uid, [leave_id], sig)
         return True
     return False
Exemple #14
0
    def create(self,vals):
        '''
        功能:重写create
        :param vals:
        :return:
        '''
        try :
            #检查门店编码是否符合规定(四位且首字母大写)
            code=vals['code']
            re_str='[A-Z]{1}[A-Z0-9]{3}'
            if len(code)!=4 or not re.match(re_str,code):
                msg='门店编码:%s,不满足门店编码规范:必须为"大写字母与数字组合的四位字符串"且"首字母大写"!' % vals['code']
                raise  except_osv(_('错误'), _(msg))

            #检查是否创建销售团队
            if (vals['store_owner'] or len(vals['users'])>0) and not vals['sale_team']:
                #创建销售团队
                sale_team=self.env['crm.team']
                sale_team_values={}
                sale_team_values['name']=vals['name']+'-销售团队'
                sale_team_values['code']=vals['code']
                #团队成员
                user_ids=[]
                if vals['store_owner']:
                    sale_team_values['user_id']=vals['store_owner']
                for userinfo in vals['users']:
                    user_ids.append(userinfo[2]['user_id'])
                member_ids=[[6, False, user_ids]]
                sale_team_values['member_ids']=member_ids
                sale_team_id=sale_team.create(sale_team_values)
                vals['sale_team']=sale_team_id.id

            #检查是否创建POS
            virtual_location=vals.get('virtual_location',False)
            company_id=vals.get('company_id',False)
            if not virtual_location and not company_id:
                if len(vals['pos_ids'])==0:
                    #创建POS
                    pos_instance=self.env['pos.config']
                    pos_value={}
                    pos_value['name']=vals['code']+'-POS'
                    pos_value['stock_location_id']=vals['virtual_location']
                    pos_value['company_id']=vals['company_id']
                    if vals['company_id']:
                        journals=self.env['account.journal'].search([('company_id','=',vals['company_id']),('journal_user','=','1')])
                        journal_ids=[]
                        for journal in journals:
                            journal_ids.append(journal.id)
                        pos_value['journal_ids']=[[6, False, journal_ids]]
                    pos_id=pos_instance.create(pos_value)
                    pos_ids=[[6, False, [pos_id.id]]]
                    vals['pos_ids']=pos_ids

            return  super(o2o_store, self).create(vals)
        except Exception as e:
            _logger.error(e)
            raise e
Exemple #15
0
def geo_find(addr):
    url = 'http://apis.map.qq.com/ws/geocoder/v1/?key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77&'
    url += urllib.quote(addr.encode('utf8'))

    try:
        result = json.load(urllib.urlopen(url))
    except Exception, e:
        raise osv.except_osv(_('Network error'),
                             _(
                                 'Cannot contact geolocation servers. Please make sure that your internet connection is up and running (%s).') % e)
Exemple #16
0
    def submit_expenses(self):
        '''
        功能:
        :return:
        '''
        try:
            for expense in self:
                result=self._validate_expense(expense)
                success= result.get('success',True)
                if not success:
                    raise except_osv(_('错误'), _(result.get('error_msg',True)))

            super(hr_expense,self).submit_expenses()
        except Exception as e:
            err_msg='"提交给经理"操作出现异常,%s' % e.message
            if hasattr(e,'value'):
                err_msg+=e.value
            _logger.error(err_msg)
            raise except_osv(('错误'), (err_msg))
Exemple #17
0
    def sync_group(self):
        try:
            appid = self.wx_officialaccount.wx_appid
            appsecret = self.wx_officialaccount.wx_appsecret
            group_help = group_manager.group_manager(appid, appsecret)
            result = group_help.getall_group()
            wx_productgroup_obj = self.env['wx.productgroup']
            if result['errcode'] == 0:
                groups = result['groups_detail']
                if len(groups) == 0:
                    msg = '公众号"%s"下的微信小店还没有商品分组,无需同步' % self.wx_officialaccount.wx_name
                    raise except_osv(_('提示'), _(msg))
                else:
                    for group in groups:
                        values = {}
                        values[
                            'wx_officialaccount'] = self.wx_officialaccount.id
                        values['wx_group_id'] = group['group_id']
                        values['wx_group_name'] = group['group_name']

                        exist_samename_groups = wx_productgroup_obj.search([
                            ('wx_group_name', '=', values['wx_group_name']),
                            ('wx_officialaccount', '=',
                             self.wx_officialaccount.id)
                        ])
                        if len(exist_samename_groups) > 0:
                            exist_samename_groups[0].write(values)
                        else:
                            wx_productgroup_obj.create(values)
            else:
                err_msg = "调用微信小店获取所有分组接口失败:%s" % result['errmsg']
                _logger.info(err_msg)
                raise except_osv(_('错误'), _(err_msg))
        except Exception as e:
            err_msg = e.message
            if hasattr(e, 'value'):
                err_msg += e.value
            _logger.error(err_msg)
            raise except_osv(_('提示'), _(err_msg))
Exemple #18
0
 def getofficialaccount(self, officalaccountid):
     wx_officialaccount_list = self.env['wx.officialaccount'].search([
         ('wx_id', '=', officalaccountid)
     ])
     if not wx_officialaccount_list or len(wx_officialaccount_list) > 1:
         error_msg = 'official account: received data for reference %s' % (
             officalaccountid)
         if not wx_officialaccount_list:
             error_msg += '; no officialaccount found'
         else:
             error_msg += '; multiple officialaccount found'
         raise except_osv(error_msg)
     return wx_officialaccount_list[0]
def get_login_info(auth_code, access_token):
    category_url = "https://qyapi.weixin.qq.com/cgi-bin/service/get_login_info?access_token=" + access_token
    category_data = {
        "auth_code": auth_code
    }
    req = urllib2.Request(category_url, json.dumps(category_data, ensure_ascii=False).encode('utf8'))
    req.add_header("Content-Type", "application/json")
    response = urllib2.urlopen(req)
    html = response.read().decode("utf-8")
    logger.debug('html:' + html)
    tokeninfo = json.loads(html)
    print tokeninfo
    if 'errcode' not in tokeninfo:
        return tokeninfo
    else:
        raise osv.except_osv(_('Error!'), _('获取企业号登录用户信息出错'))
def get_pre_auth_code(suite_id, suite_access_token):
    category_url = "https://qyapi.weixin.qq.com/cgi-bin/service/get_pre_auth_code?suite_access_token=" + suite_access_token
    category_data = {
        "suite_id": suite_id
    }
    req = urllib2.Request(category_url, json.dumps(category_data, ensure_ascii=False).encode('utf8'))
    req.add_header("Content-Type", "application/json")
    response = urllib2.urlopen(req)
    html = response.read().decode("utf-8")
    logger.debug('html:' + html)
    tokeninfo = json.loads(html)
    print tokeninfo
    if tokeninfo["errcode"] == 0:
        return tokeninfo['pre_auth_code']
    else:
        raise osv.except_osv(_('Error!'), _('获取pre_auth_code出错'))
Exemple #21
0
 def unlink(self, cr, uid, ids, context=None):
     result_success = ""
     result_error = ""
     for id in ids:
         obj = self.browse(cr, uid, id, context)
         # 微信商品只有在草稿、关闭状态可删除,避免微信产品下架了,但还有待发货订单(同步微信记录时找不到oe产品,导致无法创建销售订单)
         if obj.state == 'released' or obj.state == 'onsale':
             result_error = result_error + obj.name + ','
         else:
             result_success = result_success + obj.name + ','
             super(wx_product, obj).unlink()
             cr.commit()  # 成功的单独提交
     if result_success != "":
         result_success = "删除成功的商品:" + result_success[:-1]
     if result_error != "":
         result_error = "\n不允许删除的商品:" + result_error[:-1]
     msg = "%s%s" % (result_success, result_error)
     if result_error <> '':
         raise except_osv(_('提示'), _(msg))
Exemple #22
0
 def create_menu(self, cr, uid, ids, context=None):
     count = len(ids)
     if count == 0:
         print 'count=0'
         return
     result_success = ""
     for id in ids:
         wxOfficeAccountInfo = self.browse(cr, uid, id, context)
         menu_data = self.pool.get(
             'wx.officialaccount_menu').get_officialaccount_menu(
                 cr, uid, id, context)
         if wxOfficeAccountInfo.is_qyhapp:
             #创建企业号菜单
             menuManager_qyh = qyh_menu_manager.menu_manager(
                 wxOfficeAccountInfo['wx_appid'],
                 wxOfficeAccountInfo['wx_appsecret'])
             menuresult_qyh = menuManager_qyh.create_menu(
                 menu_data, str(wxOfficeAccountInfo['wx_qyh_app_id']))
             result_success = result_success + "应用:" + wxOfficeAccountInfo[
                 'wx_name'] + menuresult_qyh + ";"
         else:
             #创建服务号菜单
             # menu_data = self.pool.get('ycloud.wx.officialaccount_menu').get_officialaccount_menu(cr, uid, id, context)
             if wxOfficeAccountInfo.is_auth_officialaccount:
                 auth_access_token = public_sdk.get_authorizer_access_token(
                     wxOfficeAccountInfo.wx_appid, wxOfficeAccountInfo.
                     auth_component.auth_component_appid,
                     wxOfficeAccountInfo.auth_component.
                     auth_component_appsecret,
                     wxOfficeAccountInfo.authorizer_refresh_token)
                 menuresult = menu_manager.create_menu_access_token(
                     menu_data, auth_access_token)
                 pass
             else:
                 menuManager = menu_manager.menu_manager(
                     wxOfficeAccountInfo['wx_appid'],
                     wxOfficeAccountInfo['wx_appsecret'])
                 menuresult = menuManager.create_menu(menu_data)
             result_success = result_success + "公众号:" + wxOfficeAccountInfo[
                 'wx_name'] + menuresult + ";"
     result = result_success[:-1]
     raise except_osv(_('Warning!'), _(result))
Exemple #23
0
    def refuse_expenses(self, reason):
        '''
        功能:“拒绝”操作重写
        :param reason:
        :return:
        '''
        try:
            self._validate_approval() #校验
            self.write({'state': 'cancel'})
            if self.employee_id.user_id:
                body = (_("Your Expense %s has been refused.<br/><ul class=o_timeline_tracking_value_list><li>Reason<span> : </span><span class=o_timeline_tracking_value>%s</span></li></ul>") % (self.name, reason))
                self.message_post(body=body, partner_ids=[self.employee_id.user_id.partner_id.id])

            # 扣减报销金额
            _logger.info('准备扣减预算明细的报销金额...')
            success=False
            expense_admin=self.env['hr.expense'].sudo().search([('id','=',self.id)])
            if expense_admin.analytic_account_id:
                account_id=expense_admin.product_id.property_account_expense_id
                total_account=expense_admin.total_amount
                date_value=expense_admin.date
                for budget_line in expense_admin.analytic_account_id.crossovered_budget_line:
                    if account_id not in budget_line.general_budget_id.account_ids:
                        pass
                    else:
                        date_from=int(budget_line.date_from.replace('-',''))
                        date_to=int(budget_line.date_to.replace('-',''))
                        if int(date_value.replace('-','')) in range(date_from,date_to):
                            success=True
                            _logger.info('找到可扣减项:科目=%s中的预算区间为%s至%s的明细中的报销金额...' % (account_id.name,budget_line.date_from,budget_line.date_to))
                            budget_line.reimbursement_amount-=total_account
                            _logger.info('扣减成功')
                            break #退出循环
            if not success:
                _logger.info('未能找到可扣减的预算明细!')

        except Exception as e:
            err_msg='拒绝异常,%s' % e.message
            if hasattr(e,'value'):
                err_msg+=e.value
            _logger.error(err_msg)
            raise except_osv(('错误'), (err_msg))
Exemple #24
0
    def write(self, vals):
        '''
        功能:重写write,验证门店编码是否符合规定
        :param vals:
        :return:
        '''
        try:
            for store in self:
                code=self.code
                if 'code' in vals:
                    code=vals['code']
                re_str='[A-Z]{1}[A-Z0-9]{3}'
                if len(code)!=4 or not re.match(re_str,code):
                    msg='门店编码:%s,不满足门店编码规范:必须为"大写字母与数字组合的四位字符串"且"首字母大写"!' % code
                    raise  except_osv(_('错误'), _(msg))

                return super(o2o_store, store).write(vals)
        except Exception as e:
            _logger.error(e)
            raise e
def set_session_info(suite_access_token, pre_auth_code, appid_list):
    category_url = "https://qyapi.weixin.qq.com/cgi-bin/service/set_session_info?suite_access_token=" + suite_access_token
    category_data = {
        "pre_auth_code": pre_auth_code,
        "session_info":
            {
                "appid": appid_list
            }
    }
    req = urllib2.Request(category_url, json.dumps(category_data, ensure_ascii=False).encode('utf8'))
    req.add_header("Content-Type", "application/json")
    response = urllib2.urlopen(req)
    html = response.read().decode("utf-8")
    logger.debug('html:' + html)
    tokeninfo = json.loads(html)
    print tokeninfo
    if tokeninfo["errcode"] == 0:
        return True
    else:
        raise osv.except_osv(_('Error!'), _('设置授权配置出错'))
Exemple #26
0
    def create(self, vals):
        '''
        功能:员工代号未维护,找编码规则;维护了则验证是否重复
        :param vals:
        :return:
        '''
        code = vals.get('code', False)
        if not code:
            vals['code'] = self.env['ir.sequence'].get('hr.employee')
        else:
            exis_emps = self.env['hr.employee'].search([('code', '=', code),
                                                        ('id', '!=', self.id)])
            if len(exis_emps) > 0:
                exis_emp_names = ''
                for exis_emp in exis_emps:
                    exis_emp_names = exis_emp_names + exis_emp.name + ','
                msg = '员工代号%s重复(具有该员工代号的员工有%s)!' % (code, exis_emp_names[0:-1])
                raise except_osv(_('错误'), _(msg))

        return super(hr_employee, self).create(vals)
def get_suite_token(suite_id, suite_secret, suite_ticket):
    key = suite_id + "suite_access_token"
    category_url = "https://qyapi.weixin.qq.com/cgi-bin/service/get_suite_token"
    category_data = {
        "suite_id": suite_id,
        "suite_secret": suite_secret,
        "suite_ticket": suite_ticket
    }
    req = urllib2.Request(category_url, json.dumps(category_data, ensure_ascii=False).encode('utf8'))
    req.add_header("Content-Type", "application/json")
    response = urllib2.urlopen(req)
    html = response.read().decode("utf-8")
    logger.debug('html:' + html)
    tokeninfo = json.loads(html)
    print tokeninfo
    if "errcode" not in tokeninfo:
        token = tokeninfo["suite_access_token"]
        cache.redis.set(key, token, 600)
        return token
    else:
        raise osv.except_osv(_('Error!'), _('获取suite_access_token出错'))
Exemple #28
0
 def button_final_validation(self, cr, uid, ids, context=None):
     request_obj = self.pool.get('hr.evaluation.interview')
     self.write(cr, uid, ids, {'state': 'progress'}, context=context)
     for evaluation in self.browse(cr, uid, ids, context=context):
         if evaluation.employee_id and evaluation.employee_id.parent_id and evaluation.employee_id.parent_id.user_id:
             self.message_subscribe_users(
                 cr,
                 uid, [evaluation.id],
                 user_ids=[evaluation.employee_id.parent_id.user_id.id],
                 context=context)
         if len(evaluation.survey_request_ids) != len(
                 request_obj.search(cr,
                                    uid,
                                    [('evaluation_id', '=', evaluation.id),
                                     ('state', 'in', ['done', 'cancel'])],
                                    context=context)):
             raise osv.except_osv(
                 _('Warning!'),
                 _("You cannot change state, because some appraisal forms have not been completed."
                   ))
     return True
Exemple #29
0
 def survey_req_done(self, cr, uid, ids, context=None):
     for id in self.browse(cr, uid, ids, context=context):
         flag = False
         wating_id = 0
         if not id.evaluation_id.id:
             raise osv.except_osv(
                 _('Warning!'),
                 _("You cannot start evaluation without Appraisal."))
         records = id.evaluation_id.survey_request_ids
         for child in records:
             if child.state == "draft":
                 wating_id = child.id
                 continue
             if child.state != "done":
                 flag = True
         if not flag and wating_id:
             self.survey_req_waiting_answer(cr,
                                            uid, [wating_id],
                                            context=context)
     self.write(cr, uid, ids, {'state': 'done'}, context=context)
     return True
Exemple #30
0
    def approve_expenses(self):
        '''
        功能:“同意”审批逻辑重写
        :return:
        '''
        try:
            user_approval_level=self._validate_approval() #校验,无异常时返回当前用户可审批等级的集合
            levels=[] #当前用户可连续审批的集合
            for i in range(0,len(user_approval_level)):
                if i==0:
                    levels.append(user_approval_level[i])
                elif user_approval_level[i]<>user_approval_level[i-1]+1:
                    break
                else:
                    levels.append(user_approval_level[i])
            if levels:
                #当前用户可连续审批的等级,一次性执行完成
                for level in levels:
                    if level>=self.current_approval_level:
                        approval_history=self.approval_history
                        if approval_history:
                            approval_history+='-->%s[%s级]' % (self._employee_get(),level+1)
                        else:
                            approval_history='%s[%s级]' % (self._employee_get(),level+1)
                        current_approval_level=level+1 #当前应几级审批
                        update_values={}
                        update_values['approval_history']=approval_history
                        update_values['current_approval_level']=current_approval_level
                        self.write(update_values)
                        if current_approval_level==self.max_approval_level:
                            self.write({'state': 'approve'})
                            break

        except Exception as e:
            err_msg='批准异常,%s' % e.message
            if hasattr(e,'value'):
                err_msg+=e.value
            _logger.error(err_msg)
            raise except_osv(('错误'), (err_msg))