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!'), _('提交子商户资质出错'))
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!'), _('提交母商户资质出错'))
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, }
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"未创建个性化菜单,不能删除!"))
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))
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
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
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
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!'), _('发送文本消息出错'))
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))
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
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
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)
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))
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))
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出错'))
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))
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))
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))
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!'), _('设置授权配置出错'))
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出错'))
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
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
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))