moysklad 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +1 -0
- data/README.md +14 -3
- data/lib/moysklad.rb +3 -2
- data/lib/moysklad/client.rb +37 -10
- data/lib/moysklad/client/errors.rb +60 -30
- data/lib/moysklad/entities.rb +17 -21
- data/lib/moysklad/entities/assortment.rb +6 -0
- data/lib/moysklad/entities/attachment_document.rb +16 -0
- data/lib/moysklad/entities/attribute.rb +114 -37
- data/lib/moysklad/entities/attribute_metadata.rb +9 -31
- data/lib/moysklad/entities/attribute_value.rb +19 -0
- data/lib/moysklad/entities/barcode.rb +10 -4
- data/lib/moysklad/entities/base.rb +23 -8
- data/lib/moysklad/entities/bundle.rb +39 -0
- data/lib/moysklad/entities/characteristic.rb +6 -0
- data/lib/moysklad/entities/characteristic_metadata.rb +6 -0
- data/lib/moysklad/entities/collection.rb +30 -7
- data/lib/moysklad/entities/collection_meta.rb +11 -0
- data/lib/moysklad/entities/common_object.rb +0 -2
- data/lib/moysklad/entities/company_settings_metadata.rb +28 -0
- data/lib/moysklad/entities/consignment.rb +19 -17
- data/lib/moysklad/entities/context.rb +9 -0
- data/lib/moysklad/entities/counterparty.rb +18 -0
- data/lib/moysklad/entities/currency.rb +29 -0
- data/lib/moysklad/entities/custom_entity.rb +20 -10
- data/lib/moysklad/entities/custom_entity_metadata.rb +7 -32
- data/lib/moysklad/entities/customer_order.rb +116 -23
- data/lib/moysklad/entities/customer_order_position.rb +10 -18
- data/lib/moysklad/entities/employee.rb +7 -0
- data/lib/moysklad/entities/entity.rb +42 -0
- data/lib/moysklad/entities/good_folder.rb +1 -0
- data/lib/moysklad/entities/group.rb +7 -0
- data/lib/moysklad/entities/image.rb +17 -0
- data/lib/moysklad/entities/images.rb +10 -0
- data/lib/moysklad/entities/meta.rb +14 -0
- data/lib/moysklad/entities/organization.rb +19 -0
- data/lib/moysklad/entities/owner.rb +4 -0
- data/lib/moysklad/entities/price.rb +5 -8
- data/lib/moysklad/entities/price_type.rb +2 -8
- data/lib/moysklad/entities/product.rb +54 -0
- data/lib/moysklad/entities/productfolder.rb +13 -0
- data/lib/moysklad/entities/rate.rb +9 -0
- data/lib/moysklad/entities/resource_metadata.rb +13 -0
- data/lib/moysklad/entities/service.rb +28 -0
- data/lib/moysklad/entities/shortcut.rb +11 -0
- data/lib/moysklad/entities/store.rb +10 -0
- data/lib/moysklad/entities/time.rb +13 -0
- data/lib/moysklad/entities/uom.rb +7 -0
- data/lib/moysklad/entities/variant.rb +51 -0
- data/lib/moysklad/entities/workflow.rb +11 -0
- data/lib/moysklad/entities/workflow_state.rb +8 -0
- data/lib/moysklad/error.rb +1 -0
- data/lib/moysklad/resources.rb +9 -7
- data/lib/moysklad/resources/assortments.rb +14 -0
- data/lib/moysklad/resources/base.rb +32 -44
- data/lib/moysklad/resources/custom_entities.rb +27 -0
- data/lib/moysklad/resources/custom_entity_metadata.rb +12 -8
- data/lib/moysklad/resources/embedded_entity_metadata.rb +0 -1
- data/lib/moysklad/resources/indexed.rb +23 -35
- data/lib/moysklad/resources/indexed_cache.rb +36 -0
- data/lib/moysklad/resources/load_all.rb +21 -0
- data/lib/moysklad/resources/products.rb +10 -0
- data/lib/moysklad/resources/where_filter.rb +0 -1
- data/lib/moysklad/universe.rb +16 -2
- data/lib/moysklad/version.rb +1 -1
- data/moysklad.gemspec +3 -1
- data/scripts/rest.sh +5 -2
- data/spec/fixtures/Good_WithManyAttributes.raw +13 -0
- data/spec/fixtures/Workflow_list.raw +15 -0
- data/spec/fixtures/good_with_image.xml +39 -0
- data/spec/lib/moysklad/entities/customer_order_spec.rb +7 -2
- data/spec/lib/moysklad/entities/good_spec.rb +9 -0
- data/spec/lib/moysklad/resources/workflows_spec.rb +21 -0
- data/spec/spec_helper.rb +2 -1
- data/test.rb +177 -0
- metadata +97 -44
- data/lib/moysklad/entities/common.rb +0 -15
- data/lib/moysklad/entities/feature.rb +0 -20
- data/lib/moysklad/entities/good.rb +0 -34
- data/lib/moysklad/entities/stock_to.rb +0 -33
- data/lib/moysklad/entities/warehouse.rb +0 -15
- data/lib/moysklad/entities/xml_fix.rb +0 -15
@@ -1,42 +1,135 @@
|
|
1
|
+
require_relative 'entity'
|
2
|
+
require_relative 'owner'
|
3
|
+
require_relative 'group'
|
4
|
+
require_relative 'rate'
|
5
|
+
require_relative 'customer_order_position'
|
6
|
+
require_relative 'time'
|
7
|
+
|
1
8
|
module Moysklad::Entities
|
2
9
|
# Пример:
|
3
|
-
# https://
|
10
|
+
# https://online.moysklad.ru/api/remap/1.1/doc/index.html#документ-заказ-покупателя
|
4
11
|
#
|
5
|
-
class CustomerOrder <
|
6
|
-
|
7
|
-
|
12
|
+
class CustomerOrder < Entity
|
13
|
+
|
14
|
+
# АТРИБУТЫ СУЩНОСТИ ¶
|
15
|
+
#
|
16
|
+
# meta - Метаданные о Заказе покупателя
|
17
|
+
# id - ID в формате UUID Только для чтения
|
18
|
+
# accountId - ID учетной записи Только для чтения
|
19
|
+
attribute :accountId, String
|
20
|
+
|
21
|
+
# syncId - ID синхронизации Только для чтения
|
22
|
+
attribute :syncId, String
|
23
|
+
|
24
|
+
# version - Версия сущности Только для чтения
|
25
|
+
# updated - Момент последнего обновления сущности Только для чтения
|
26
|
+
# deleted - Момент последнего удаления сущности Только для чтения
|
27
|
+
# name - номер Заказа покупателя
|
28
|
+
# description - Комментарий Заказа покупателя
|
29
|
+
attribute :description, String
|
30
|
+
|
31
|
+
# externalCode - Внешний код Заказа покупателя
|
32
|
+
# moment - Дата Заказа
|
33
|
+
attribute :moment, Time
|
34
|
+
|
35
|
+
# applicable - Отметка о проведении
|
36
|
+
attribute :applicable, Boolean
|
37
|
+
|
38
|
+
# vatIncluded - Включен ли НДС в цену
|
39
|
+
attribute :vatIncluded, Boolean
|
40
|
+
|
41
|
+
# vatEnabled - Учитывается ли НДС
|
42
|
+
attribute :vatEnabled, Boolean
|
43
|
+
|
44
|
+
# sum - Сумма Заказа в установленной валюте Только для чтения
|
45
|
+
attribute :sum, Integer
|
46
|
+
|
47
|
+
# rate - Валюта
|
48
|
+
attribute :rate, Rate
|
49
|
+
|
50
|
+
# owner - Владелец (Сотрудник)
|
51
|
+
attribute :owner, Owner
|
52
|
+
# shared - Общий доступ
|
53
|
+
|
54
|
+
attribute :shared, Boolean
|
55
|
+
|
56
|
+
# group - Отдел сотрудника
|
57
|
+
attribute :group, Group
|
58
|
+
|
59
|
+
# organization - Ссылка на ваше юрлицо в формате Метаданных Необходимое
|
60
|
+
attribute :organization, Entity
|
61
|
+
|
62
|
+
# agent - Ссылка на контрагента в формате Метаданных Необходимое
|
63
|
+
attribute :agent, Entity
|
64
|
+
|
65
|
+
# store - Ссылка на склад в формате Метаданных
|
66
|
+
attribute :store, Entity
|
67
|
+
|
68
|
+
# contract - Ссылка на договор в формате Метаданных
|
69
|
+
attribute :contract, Entity
|
70
|
+
|
71
|
+
# state - Статус Заказа в формате Метаданных
|
72
|
+
|
73
|
+
attribute :state, Entity
|
8
74
|
|
9
|
-
|
75
|
+
# organizationAccount - Ссылка на счёт вашего юрлица в формате Метаданных
|
76
|
+
attribute :organizationAccount, Entity
|
10
77
|
|
11
|
-
|
12
|
-
attribute :
|
78
|
+
# agentAccount - Ссылка на счёт контрагента в формате Метаданных
|
79
|
+
attribute :agentAccount, Entity
|
13
80
|
|
14
|
-
|
81
|
+
# attributes - Коллекция доп. полей.
|
82
|
+
# attribute :attributes, Hash
|
15
83
|
|
16
|
-
|
17
|
-
attribute :
|
18
|
-
attribute :sourceAgentUuid, String
|
84
|
+
# documents - Список печатных форм в формате Метаданных
|
85
|
+
attribute :documents, Entity
|
19
86
|
|
20
|
-
attribute :targetAgentUuid, String
|
21
|
-
attribute :targetAccountUuid, String
|
22
87
|
|
23
|
-
|
24
|
-
|
88
|
+
# Поля при expand’е:
|
89
|
+
#
|
90
|
+
# name - номер документа
|
91
|
+
# moment - дата печати
|
92
|
+
# href - ссылка на файл печатной формы
|
93
|
+
# fileName - название файла печатной формы
|
94
|
+
# updated - дата последнего изменения
|
95
|
+
# created - Дата создания Только для чтения
|
96
|
+
#
|
25
97
|
|
26
|
-
|
98
|
+
# vatSum - Сумма НДС Только для чтения
|
99
|
+
attribute :vatSum, Integer
|
27
100
|
|
28
|
-
|
101
|
+
# positions - Ссылка на позиции в Заказе в формате Метаданных
|
102
|
+
attribute :positions, Object # Array[CustomerOrderPosition] или CollectionMeta
|
29
103
|
|
30
|
-
|
104
|
+
# reservedSum - Сумма товаров в резерве Только для чтения
|
105
|
+
attribute :reservedSum, Integer
|
31
106
|
|
32
|
-
|
33
|
-
attribute :
|
107
|
+
# deliveryPlannedMoment - Планируемая дата отгрузки
|
108
|
+
attribute :deliveryPlannedMoment, Time
|
34
109
|
|
35
|
-
|
110
|
+
# payedSum - Сумма входящих платежей по Заказу Только для чтения
|
111
|
+
attribute :payedSum, Integer
|
36
112
|
|
37
|
-
|
113
|
+
# shippedSum - Сумма отгруженного Только для чтения
|
114
|
+
attribute :shippedSum, Integer
|
38
115
|
|
39
|
-
|
116
|
+
# invoicedSum - Сумма счетов покупателю Только для чтения
|
117
|
+
attribute :invoicedSum, Integer
|
40
118
|
|
119
|
+
# project - Ссылка на проект в фоÑмате Метаданных
|
120
|
+
#
|
121
|
+
# СВЯЗИ С ДРУГИМИ ДОКУМЕНТАМИ
|
122
|
+
#
|
123
|
+
# purchaseOrders - Массив ссылок на связанные заказы поставщикам
|
124
|
+
# demands - Массив ссылок на связанные отгрузки
|
125
|
+
# payments - Массив ссылок на связанные платежи
|
126
|
+
# invoicesOut - Массив ссылок на связанные счета покупателям
|
127
|
+
#def state universe
|
128
|
+
#cache :customer_order_states, universe do
|
129
|
+
#fail "No stateUuid in CustomerOrder #{uuid}" unless stateUuid
|
130
|
+
#workflow = universe.workflows.findWhere name: 'CustomerOrder'
|
131
|
+
#workflow.states.find { |s| s.uuid == stateUuid }
|
132
|
+
#end
|
133
|
+
#end
|
41
134
|
end
|
42
135
|
end
|
@@ -1,22 +1,14 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
require_relative 'meta'
|
3
|
+
require_relative 'assortment'
|
4
|
+
|
1
5
|
module Moysklad::Entities
|
2
6
|
class CustomerOrderPosition < Base
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
attribute :
|
9
|
-
attribute :goodUuid, String
|
10
|
-
attribute :consignmentUuid, String
|
11
|
-
attribute :quantity, Float
|
12
|
-
attribute :discount, Float
|
13
|
-
attribute :consignmentUuid, String
|
14
|
-
|
15
|
-
element :deleted, Time
|
16
|
-
|
17
|
-
element :basePrice, Moysklad::Entities::Price, tag: :basePrice
|
18
|
-
element :price, Moysklad::Entities::Price, tag: :price
|
19
|
-
element :reserve, Float
|
7
|
+
attribute :quantity, Integer
|
8
|
+
attribute :price, Integer
|
9
|
+
attribute :discount, Integer
|
10
|
+
attribute :vat, Integer
|
11
|
+
attribute :reserve, Integer
|
12
|
+
attribute :assortment, Assortment
|
20
13
|
end
|
21
|
-
|
22
14
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
require_relative 'meta'
|
3
|
+
|
4
|
+
module Moysklad::Entities
|
5
|
+
class Entity < Base
|
6
|
+
|
7
|
+
# product, productfolder, feature
|
8
|
+
#meta - Метаданные объекта
|
9
|
+
#id - ID услуги в формате UUID Только для чтения
|
10
|
+
#accountId - ID учетной записи Только для чтения
|
11
|
+
#version - Версия сущности Только для чтения
|
12
|
+
#updated - Момент последнего обновления сущности Только для чтения
|
13
|
+
#name - Наименование товара с Модификацией
|
14
|
+
#code - Код Модификации
|
15
|
+
#externalCode - Внешний код Модификации
|
16
|
+
#archived - Добавлен ли товар в архив
|
17
|
+
|
18
|
+
attribute :meta, Meta
|
19
|
+
attribute :id, String
|
20
|
+
attribute :version, Integer
|
21
|
+
attribute :updated, String
|
22
|
+
attribute :name, String
|
23
|
+
attribute :code, String
|
24
|
+
attribute :externalCode, String
|
25
|
+
attribute :archived, Boolean
|
26
|
+
|
27
|
+
def to_s
|
28
|
+
attributes.to_s
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def cache ns, key
|
34
|
+
@cache||={}
|
35
|
+
@cache[ns]||={}
|
36
|
+
cc = @cache[ns]
|
37
|
+
|
38
|
+
cc[key] = yield unless cc.has_key? key
|
39
|
+
cc[key]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
module Moysklad::Entities
|
3
|
+
class Image < Base
|
4
|
+
attribute :meta, Meta
|
5
|
+
attribute :title, String
|
6
|
+
attribute :filename, String
|
7
|
+
attribute :size, Integer
|
8
|
+
|
9
|
+
attribute :updated, Time
|
10
|
+
attribute :miniature, Meta
|
11
|
+
attribute :tiny, Meta
|
12
|
+
|
13
|
+
def download(client, dir)
|
14
|
+
client.download meta.href, dir + filename
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module Moysklad::Entities
|
4
|
+
class Meta < Base
|
5
|
+
attribute :href, String
|
6
|
+
attribute :metadataHref, String
|
7
|
+
attribute :type, String
|
8
|
+
attribute :mediaType, String # application/json
|
9
|
+
|
10
|
+
def id
|
11
|
+
@id ||= href.split('/').last
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative 'entity'
|
2
|
+
|
3
|
+
module Moysklad::Entities
|
4
|
+
class Organization < Entity
|
5
|
+
attribute :externalCode, String
|
6
|
+
attribute :archived, Boolean
|
7
|
+
attribute :companyType, String
|
8
|
+
attribute :legalTitle, String
|
9
|
+
attribute :legalAddress, String
|
10
|
+
attribute :inn, String
|
11
|
+
attribute :okpo, String
|
12
|
+
attribute :email, String
|
13
|
+
attribute :phone, String
|
14
|
+
attribute :director, String
|
15
|
+
attribute :payerVat, Boolean
|
16
|
+
attribute :isEgaisEnable, Boolean
|
17
|
+
attribute :attrs, Array[Hash]
|
18
|
+
end
|
19
|
+
end
|
@@ -1,15 +1,12 @@
|
|
1
|
+
require_relative 'currency'
|
1
2
|
module Moysklad::Entities
|
2
3
|
class Price < Base
|
3
|
-
|
4
|
-
|
4
|
+
attribute :value, Float
|
5
|
+
attribute :currency, Currency
|
6
|
+
attribute :priceType, String # Цена продажи/ Распродажа
|
5
7
|
|
6
8
|
def self.from_money money
|
7
|
-
|
8
|
-
p.sumInCurrency = p.sum = money.cents
|
9
|
-
p
|
9
|
+
raise 'not implemented'
|
10
10
|
end
|
11
|
-
|
12
|
-
attribute :sumInCurrency, Float
|
13
|
-
attribute :sum, Float
|
14
11
|
end
|
15
12
|
end
|
@@ -1,13 +1,7 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
1
3
|
module Moysklad::Entities
|
2
4
|
class PriceType < Base
|
3
|
-
include CommonObject
|
4
|
-
include Moysklad::Entities::XmlFix
|
5
|
-
tag 'priceType'
|
6
|
-
|
7
|
-
attribute :updated, Time
|
8
|
-
attribute :updatedBy, String
|
9
5
|
attribute :name, String
|
10
|
-
|
11
|
-
attribute :index, Integer
|
12
6
|
end
|
13
7
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require_relative 'currency'
|
2
|
+
require_relative 'productfolder'
|
3
|
+
require_relative 'uom'
|
4
|
+
require_relative 'entity'
|
5
|
+
require_relative 'attribute_metadata'
|
6
|
+
require_relative 'image'
|
7
|
+
|
8
|
+
module Moysklad::Entities
|
9
|
+
class Product < Entity
|
10
|
+
attribute :accountId, String
|
11
|
+
attribute :owner, Owner
|
12
|
+
attribute :group, Group
|
13
|
+
attribute :description, String
|
14
|
+
# attribute :shared, Shared
|
15
|
+
attribute :vat, Float
|
16
|
+
attribute :effectiveVat, Float
|
17
|
+
attribute :pathName, String
|
18
|
+
attribute :productFolder, Productfolder
|
19
|
+
|
20
|
+
attribute :uom, Uom
|
21
|
+
|
22
|
+
attribute :minPrice, Float
|
23
|
+
attribute :buyPrice, Currency
|
24
|
+
attribute :salePrices, Array[Price]
|
25
|
+
|
26
|
+
attribute :image, Image
|
27
|
+
|
28
|
+
attribute :article, String
|
29
|
+
attribute :weighed, Boolean
|
30
|
+
attribute :attrs, Array[Attribute]
|
31
|
+
attribute :weight, Float
|
32
|
+
attribute :volume, Float
|
33
|
+
attribute :barcodes, Array[String]
|
34
|
+
|
35
|
+
attribute :isSerialTrackable, Boolean
|
36
|
+
|
37
|
+
attribute :modificationsCount, Integer
|
38
|
+
|
39
|
+
|
40
|
+
# Когда загружаем через ассортименты эти поля устанавливаются
|
41
|
+
attribute :stock, Float
|
42
|
+
attribute :reserve, Float
|
43
|
+
attribute :inTransit, Float
|
44
|
+
attribute :quantity, Float
|
45
|
+
|
46
|
+
# preferences
|
47
|
+
|
48
|
+
def features universe
|
49
|
+
cache :features, universe do
|
50
|
+
universe.features.where goodUuid: uuid
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require_relative 'entity'
|
2
|
+
|
3
|
+
module Moysklad::Entities
|
4
|
+
class Productfolder < Entity
|
5
|
+
attribute :accountId, String
|
6
|
+
attribute :owner, Owner
|
7
|
+
attribute :group, Group
|
8
|
+
attribute :description, String
|
9
|
+
attribute :vat, Float
|
10
|
+
attribute :effectiveVat, Float
|
11
|
+
attribute :productFolder, self
|
12
|
+
end
|
13
|
+
end
|