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.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +1 -0
  4. data/README.md +14 -3
  5. data/lib/moysklad.rb +3 -2
  6. data/lib/moysklad/client.rb +37 -10
  7. data/lib/moysklad/client/errors.rb +60 -30
  8. data/lib/moysklad/entities.rb +17 -21
  9. data/lib/moysklad/entities/assortment.rb +6 -0
  10. data/lib/moysklad/entities/attachment_document.rb +16 -0
  11. data/lib/moysklad/entities/attribute.rb +114 -37
  12. data/lib/moysklad/entities/attribute_metadata.rb +9 -31
  13. data/lib/moysklad/entities/attribute_value.rb +19 -0
  14. data/lib/moysklad/entities/barcode.rb +10 -4
  15. data/lib/moysklad/entities/base.rb +23 -8
  16. data/lib/moysklad/entities/bundle.rb +39 -0
  17. data/lib/moysklad/entities/characteristic.rb +6 -0
  18. data/lib/moysklad/entities/characteristic_metadata.rb +6 -0
  19. data/lib/moysklad/entities/collection.rb +30 -7
  20. data/lib/moysklad/entities/collection_meta.rb +11 -0
  21. data/lib/moysklad/entities/common_object.rb +0 -2
  22. data/lib/moysklad/entities/company_settings_metadata.rb +28 -0
  23. data/lib/moysklad/entities/consignment.rb +19 -17
  24. data/lib/moysklad/entities/context.rb +9 -0
  25. data/lib/moysklad/entities/counterparty.rb +18 -0
  26. data/lib/moysklad/entities/currency.rb +29 -0
  27. data/lib/moysklad/entities/custom_entity.rb +20 -10
  28. data/lib/moysklad/entities/custom_entity_metadata.rb +7 -32
  29. data/lib/moysklad/entities/customer_order.rb +116 -23
  30. data/lib/moysklad/entities/customer_order_position.rb +10 -18
  31. data/lib/moysklad/entities/employee.rb +7 -0
  32. data/lib/moysklad/entities/entity.rb +42 -0
  33. data/lib/moysklad/entities/good_folder.rb +1 -0
  34. data/lib/moysklad/entities/group.rb +7 -0
  35. data/lib/moysklad/entities/image.rb +17 -0
  36. data/lib/moysklad/entities/images.rb +10 -0
  37. data/lib/moysklad/entities/meta.rb +14 -0
  38. data/lib/moysklad/entities/organization.rb +19 -0
  39. data/lib/moysklad/entities/owner.rb +4 -0
  40. data/lib/moysklad/entities/price.rb +5 -8
  41. data/lib/moysklad/entities/price_type.rb +2 -8
  42. data/lib/moysklad/entities/product.rb +54 -0
  43. data/lib/moysklad/entities/productfolder.rb +13 -0
  44. data/lib/moysklad/entities/rate.rb +9 -0
  45. data/lib/moysklad/entities/resource_metadata.rb +13 -0
  46. data/lib/moysklad/entities/service.rb +28 -0
  47. data/lib/moysklad/entities/shortcut.rb +11 -0
  48. data/lib/moysklad/entities/store.rb +10 -0
  49. data/lib/moysklad/entities/time.rb +13 -0
  50. data/lib/moysklad/entities/uom.rb +7 -0
  51. data/lib/moysklad/entities/variant.rb +51 -0
  52. data/lib/moysklad/entities/workflow.rb +11 -0
  53. data/lib/moysklad/entities/workflow_state.rb +8 -0
  54. data/lib/moysklad/error.rb +1 -0
  55. data/lib/moysklad/resources.rb +9 -7
  56. data/lib/moysklad/resources/assortments.rb +14 -0
  57. data/lib/moysklad/resources/base.rb +32 -44
  58. data/lib/moysklad/resources/custom_entities.rb +27 -0
  59. data/lib/moysklad/resources/custom_entity_metadata.rb +12 -8
  60. data/lib/moysklad/resources/embedded_entity_metadata.rb +0 -1
  61. data/lib/moysklad/resources/indexed.rb +23 -35
  62. data/lib/moysklad/resources/indexed_cache.rb +36 -0
  63. data/lib/moysklad/resources/load_all.rb +21 -0
  64. data/lib/moysklad/resources/products.rb +10 -0
  65. data/lib/moysklad/resources/where_filter.rb +0 -1
  66. data/lib/moysklad/universe.rb +16 -2
  67. data/lib/moysklad/version.rb +1 -1
  68. data/moysklad.gemspec +3 -1
  69. data/scripts/rest.sh +5 -2
  70. data/spec/fixtures/Good_WithManyAttributes.raw +13 -0
  71. data/spec/fixtures/Workflow_list.raw +15 -0
  72. data/spec/fixtures/good_with_image.xml +39 -0
  73. data/spec/lib/moysklad/entities/customer_order_spec.rb +7 -2
  74. data/spec/lib/moysklad/entities/good_spec.rb +9 -0
  75. data/spec/lib/moysklad/resources/workflows_spec.rb +21 -0
  76. data/spec/spec_helper.rb +2 -1
  77. data/test.rb +177 -0
  78. metadata +97 -44
  79. data/lib/moysklad/entities/common.rb +0 -15
  80. data/lib/moysklad/entities/feature.rb +0 -20
  81. data/lib/moysklad/entities/good.rb +0 -34
  82. data/lib/moysklad/entities/stock_to.rb +0 -33
  83. data/lib/moysklad/entities/warehouse.rb +0 -15
  84. 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://support.moysklad.ru/hc/ru/articles/203402923-Пример-загрузки-заказа-покупателя-через-REST-API
10
+ # https://online.moysklad.ru/api/remap/1.1/doc/index.html#документ-заказ-покупателя
4
11
  #
5
- class CustomerOrder < Base
6
- include CommonObject
7
- include XmlFix
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
- tag 'customerOrder'
75
+ # organizationAccount - Ссылка на счёт вашего юрлица в формате Метаданных
76
+ attribute :organizationAccount, Entity
10
77
 
11
- attribute :created, Time
12
- attribute :createdBy, String
78
+ # agentAccount - Ссылка на счёт контрагента в формате Метаданных
79
+ attribute :agentAccount, Entity
13
80
 
14
- attribute :reservedSum, Float
81
+ # attributes - Коллекция доп. полей.
82
+ # attribute :attributes, Hash
15
83
 
16
- attribute :sourceStoreUuid, String
17
- attribute :sourceAccountUuid, String
18
- attribute :sourceAgentUuid, String
84
+ # documents - Список печатных форм в формате Метаданных
85
+ attribute :documents, Entity
19
86
 
20
- attribute :targetAgentUuid, String
21
- attribute :targetAccountUuid, String
22
87
 
23
- attribute :applicable, Boolean
24
- attribute :moment, Time
88
+ # Поля при expand’е:
89
+ #
90
+ # name - номер документа
91
+ # moment - дата печати
92
+ # href - ссылка на файл печатной формы
93
+ # fileName - название файла печатной формы
94
+ # updated - дата последнего изменения
95
+ # created - Дата создания Только для чтения
96
+ #
25
97
 
26
- attribute :payerVat, Boolean
98
+ # vatSum - Сумма НДС Только для чтения
99
+ attribute :vatSum, Integer
27
100
 
28
- attribute :consignmentUuid, String
101
+ # positions - Ссылка на позиции в Заказе в формате Метаданных
102
+ attribute :positions, Object # Array[CustomerOrderPosition] или CollectionMeta
29
103
 
30
- attribute :rate, Float
104
+ # reservedSum - Сумма товаров в резерве Только для чтения
105
+ attribute :reservedSum, Integer
31
106
 
32
- attribute :vatIncluded, Boolean
33
- attribute :name, String
107
+ # deliveryPlannedMoment - Планируемая дата отгрузки
108
+ attribute :deliveryPlannedMoment, Time
34
109
 
35
- element :sum, Moysklad::Entities::Price, tag: :sum
110
+ # payedSum - Сумма входящих платежей по Заказу Только для чтения
111
+ attribute :payedSum, Integer
36
112
 
37
- element :deleted, Time
113
+ # shippedSum - Сумма отгруженного Только для чтения
114
+ attribute :shippedSum, Integer
38
115
 
39
- has_many :customerOrderPosition, Moysklad::Entities::CustomerOrderPosition
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
- include HappyMapper
4
- include XmlFix
5
-
6
- tag 'customerOrderPosition'
7
-
8
- attribute :vat, Integer
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,7 @@
1
+ require_relative 'meta'
2
+
3
+ module Moysklad::Entities
4
+ class Employee < Base
5
+ attribute :meta, Meta
6
+ end
7
+ 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
@@ -5,5 +5,6 @@ module Moysklad::Entities
5
5
  tag 'goodFolder'
6
6
 
7
7
  attribute :productCode, String
8
+ attribute :parentUuid, String
8
9
  end
9
10
  end
@@ -0,0 +1,7 @@
1
+ require_relative 'meta'
2
+
3
+ module Moysklad::Entities
4
+ class Group < Base
5
+ attribute :meta, Meta
6
+ end
7
+ 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,10 @@
1
+ module Moysklad::Entities
2
+ class Images < Base
3
+ include HappyMapper
4
+ include Moysklad::Entities::XmlFix
5
+
6
+ tag 'images'
7
+
8
+ has_many :image, Moysklad::Entities::Image
9
+ end
10
+ 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
@@ -0,0 +1,4 @@
1
+ module Moysklad::Entities
2
+ class Owner < Base
3
+ end
4
+ end
@@ -1,15 +1,12 @@
1
+ require_relative 'currency'
1
2
  module Moysklad::Entities
2
3
  class Price < Base
3
- include HappyMapper
4
- include Moysklad::Entities::XmlFix
4
+ attribute :value, Float
5
+ attribute :currency, Currency
6
+ attribute :priceType, String # Цена продажи/ Распродажа
5
7
 
6
8
  def self.from_money money
7
- p = new
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
@@ -0,0 +1,9 @@
1
+ require_relative 'base'
2
+ require_relative 'currency'
3
+
4
+ module Moysklad::Entities
5
+ class Rate < Base
6
+ attribute :currency, Currency
7
+ attribute :value, Integer
8
+ end
9
+ end