如何使用PHP从OpenERP获取销售订单的送货地址
解决OpenERP获取销售订单送货地址而非发票地址的问题
你踩的坑很典型——现在你调用res.partner时传的是sales['partner_invoice_id'][0],这个字段本身就对应发票地址的关联伙伴记录,所以拿到发票地址完全是意料之中的事。要获取送货地址,只需要换个关联字段就行:
正确实现步骤
- 获取销售订单数据:你的初始查询逻辑没问题,要是想更高效,可以明确指定要读取的字段(可选操作):
$arr = ['manual', 'shipping_except', 'done', 'progress']; $partner_ids = $models->execute_kw($db, $uid, $password, 'sale.order', 'search', [ [ ['state', 'in', $arr], ['date_order', '=', '2018-04-11'] ] ]); // 可选:指定读取字段,确保包含送货地址关联字段 $saledata = $models->execute_kw($db, $uid, $password, 'sale.order', 'read', [ $partner_ids, ['name', 'partner_shipping_id', /* 其他你需要的字段 */] ]);
- 获取送货地址对应的伙伴信息:把
partner_invoice_id替换成partner_shipping_id即可:
// 假设$saledata是单个订单记录,批量处理的话遍历数组就行 $sales = $saledata[0]; $userspecificdata = $models->execute_kw($db, $uid, $password, 'res.partner', 'read', [ [$sales['partner_shipping_id'][0]] ]);
- 提取地址信息:这部分代码基本不用改,注意原代码里的
country字段应该是country_id(OpenERP里国家字段的正确标识):
$shipping_address = [ "street1" => $userspecificdata[0]["street"], "city" => $userspecificdata[0]["city"], "state" => $userspecificdata[0]["state_id"][1], "zip" => $userspecificdata[0]["zip"], "country" => $userspecificdata[0]["country_id"][1], "phone" => $userspecificdata[0]["phone"], ];
额外提示
- 如果销售订单没有单独设置送货地址,
partner_shipping_id会默认和客户主记录(partner_id)一致,此时拿到的就是客户档案里的默认送货地址。 - 调用
read方法时建议明确指定需要的字段,避免读取冗余数据,提升接口调用效率。
内容的提问来源于stack exchange,提问作者Mukesh Kumar
相关产品推荐
相关产品推荐

