class Colppy::Product

Constants

ATTRIBUTES_MAPPER
DATA_KEYS_SETTERS
PROTECTED_DATA_KEYS

Attributes

code[R]
id[R]
name[R]

Public Class Methods

all(client, company) click to toggle source
# File lib/colppy/resources/product.rb, line 26
def all(client, company)
  list(client, company)
end
list(client, company, parameters = {}) click to toggle source
# File lib/colppy/resources/product.rb, line 30
def list(client, company, parameters = {})
  call_parameters = base_params.merge(parameters)
  response = client.call(
    :product,
    :list,
    extended_parameters(client, company, call_parameters)
  )
  if response[:success]
    results = response[:data].map do |params|
      new(params.merge(client: client, company: company))
    end
    parse_list_response(results, response[:total].to_i, call_parameters)
  else
    response
  end
end
new(client: nil, company: nil, **params) click to toggle source
Calls superclass method Colppy::Resource::new
# File lib/colppy/resources/product.rb, line 68
def initialize(client: nil, company: nil, **params)
  @client = client if client && client.is_a?(Colppy::Client)
  @company = company if company && company.is_a?(Colppy::Company)

  @id = params.delete(:idItem) || params.delete(:id)
  @name = params.delete(:descripcion) || params.delete(:name)
  @code = params.delete(:codigo) || params.delete(:code)

  super(params)
end

Private Class Methods

base_params() click to toggle source
# File lib/colppy/resources/product.rb, line 56
def base_params
  {
    filter:[],
    order: [{
      field: "codigo",
      dir: "asc"
    }]
  }
end
extended_parameters(client, company, parameters) click to toggle source
# File lib/colppy/resources/product.rb, line 49
def extended_parameters(client, company, parameters)
  [ client.session_params,
    company.params,
    parameters
  ].inject(&:merge)
end

Public Instance Methods

code=(value) click to toggle source
# File lib/colppy/resources/product.rb, line 99
def code=(value)
  @code = value
end
exist?() click to toggle source
# File lib/colppy/resources/product.rb, line 91
def exist?
  !new?
end
name=(value) click to toggle source
# File lib/colppy/resources/product.rb, line 95
def name=(value)
  @name = value
end
new?() click to toggle source
# File lib/colppy/resources/product.rb, line 87
def new?
  @id.nil? || @id.empty?
end
sales_account() click to toggle source
# File lib/colppy/resources/product.rb, line 123
def sales_account
  check_mandatory_account!(:sales_account)
end
save() click to toggle source
# File lib/colppy/resources/product.rb, line 103
def save
  ensure_client_valid! && ensure_company_valid!

  response = @client.call(
    :product,
    operation,
    save_parameters
  )
  if response[:success]
    response_data = response[:data]
    case operation
    when :create
      @id = response_data[:idItem]
    end
    self
  else
    false
  end
end

Private Instance Methods

attr_inspect() click to toggle source
# File lib/colppy/resources/product.rb, line 129
def attr_inspect
  [:id, :code, :name]
end
check_mandatory_account!(account) click to toggle source
# File lib/colppy/resources/product.rb, line 163
def check_mandatory_account!(account)
  if account_name_or_id = @data[account]
    real_account_name = @company.account_name(account_name_or_id)
    if real_account_name
      real_account_name
    else
      account_name_or_id
    end
  else
    raise DataError.new("The :#{account} is required for the product. You should specify one via product.#{account} = '', or product[:#{account}] = '', or when you initialize it. You should check the available and valid accounts in Colppy")
  end
end
operation() click to toggle source
# File lib/colppy/resources/product.rb, line 133
def operation
  new? ? :create : :update
end
params() click to toggle source
# File lib/colppy/resources/product.rb, line 144
def params
  {
    idItem: @id || "",
    idEmpresa: @company.id,
    codigo: @code || "",
    descripcion: @name || "",
    detalle: @data[:detail] || "",
    precioVenta: @data[:sell_price] || "0",
    ultimoPrecioCompra: @data[:last_purchase_price] || "",
    ctaInventario: check_mandatory_account!(:inventory_account),
    ctaCostoVentas: check_mandatory_account!(:sales_costs_account),
    ctaIngresoVentas: check_mandatory_account!(:sales_account),
    iva: @data[:tax] || "21",
    tipoItem: @data[:item_type] || "P",
    unidadMedida: @data[:measure_unit] || "u",
    minimo: @data[:minimum_stock] || "0"
  }
end
save_parameters() click to toggle source
# File lib/colppy/resources/product.rb, line 137
def save_parameters
  [
    @client.session_params,
    params
  ].inject(&:merge)
end