首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Rails中的API在zoho图书中创建采购订单

通过Rails中的API在zoho图书中创建采购订单
EN

Stack Overflow用户
提问于 2018-06-28 09:20:44
回答 1查看 560关注 0票数 0

我正在使用Zoho创建一个采购订单

(order) -

唯一需要的项目似乎是vendor_idline_items。但是,在创建了一个职务之后,我得到了以下消息:

ZohoBooks::BadRequestError: Purchase order cannot be created for a non-purchase item.

这是密码:

代码语言:javascript
复制
```javascript

类CreatePurchaseOrderJob < ApplicationJob

queue_as :默认

def执行(Order_id)

代码语言:javascript
复制
@order = SupplierOrder.find(order_id)
代码语言:javascript
复制
create_purchase_order

结束

私有

attr_reader :订单

def供应商

代码语言:javascript
复制
name = order.supplier.name
代码语言:javascript
复制
books.get_contact_with_options(contact_type: :vendor, contact_name: name)

结束

def create_purchase_order

代码语言:javascript
复制
payload = {
代码语言:javascript
复制
  vendor_id: vendor['contact_id'],
代码语言:javascript
复制
  purchaseorder_number: order.reference,
代码语言:javascript
复制
  reference_number: order.reference,
代码语言:javascript
复制
  line_items: line_items
代码语言:javascript
复制
}
代码语言:javascript
复制
books.create_purchase_order(payload)

结束

def line_items

代码语言:javascript
复制
order.rfq_line_item_prices.order(:id).map do |price|
代码语言:javascript
复制
  line_item(price)
代码语言:javascript
复制
end

结束

def line_item(价格)

代码语言:javascript
复制
{
代码语言:javascript
复制
  name: price.current_line_item.shape,
代码语言:javascript
复制
  description: price.current_line_item&.name,
代码语言:javascript
复制
  bcy_rate: price.unit_price.to_f,
代码语言:javascript
复制
  rate: price.unit_price.to_f,
代码语言:javascript
复制
  quantity: price.current_line_item.quantity,
代码语言:javascript
复制
  tax_id: Registry.zoho_vat_tax_id,
代码语言:javascript
复制
  item_custom_fields: [
代码语言:javascript
复制
    { label: 'Grade', value: price.current_line_item&.grade },
代码语言:javascript
复制
    { label: 'Finish', value: price.current_line_item&.finish },
代码语言:javascript
复制
    { label: 'Dimensions', value: price.current_line_item&.dimensions }
代码语言:javascript
复制
  ]
代码语言:javascript
复制
}

结束

def书籍

代码语言:javascript
复制
@books ||= Registry.books

结束

结束

代码语言:javascript
复制

这是相同的代码,我们使用的发票和工作,所以我错过了一些神奇的东西,让Zoho知道这是一个购买项目,没有任何迹象表明这可能是什么。我通过聊天问到了以下内容:The reason why you're getting this error message is because, You can create a purchase order only when you add the purchase info for an item.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-06 09:24:05

因此,答案比我想象的要容易,尽管它花了我想要的更长的时间。最后,我决定尝试添加属性,即使它们被定义为可选属性。通过包含项目id,它允许创建采购订单。

我的最后代码:

代码语言:javascript
复制
class CreatePurchaseOrderJob < ApplicationJob
  queue_as :default

  def perform(order_id)
    @order = SupplierOrder.find(order_id)
    create_purchase_order
  end

  private

  def payload
    {
      vendor_id: vendor['contact_id'],
      reference_number: order&.reference,
      line_items: line_items
    }
  end

  attr_reader :order

  def vendor
    @vendor ||= books.find_or_create_vendor(order.supplier)
  end

  def create_purchase_order
    begin
      books.create_purchase_order(payload)
    rescue Exception => e
      Airbrake.notify(e)
    end
  end

  def line_items
    order.line_item_prices.order(:id).map do |price|
      line_item(price)
    end
  end

  def item_id(name)
    books.find_or_create_item(name)['item_id']
  end

  def line_item(price)
    {
      item_id: item_id(price.current_line_item.shape),
      description: price.current_line_item&.description,
      bcy_rate: price.unit_price.to_f,
      rate: price.unit_price.to_f,
      quantity: price.current_line_item.quantity,
      tax_id: Registry.vat_tax_id,
      item_custom_fields: [
        { label: 'Grade', value: price.current_line_item&.grade },
        { label: 'Finish', value: price.current_line_item&.finish },
        { label: 'Dimensions', value: price.current_line_item&.dimensions }
      ]
    }
  end

  def books
    @books ||= Registry.books
  end
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51079139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档