noosh24 0.1.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.
@@ -0,0 +1,951 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Noosh24
4
+ Restaurant = Data.define(
5
+ :id,
6
+ :name,
7
+ :slug
8
+ ) do
9
+ include Model
10
+
11
+ def self.from_hash(data)
12
+ data = Convert.mapping(data)
13
+ new(
14
+ id: Convert.str(data["id"]),
15
+ name: Convert.str(data["name"]),
16
+ slug: Convert.str(data["slug"]),
17
+ raw: data
18
+ )
19
+ end
20
+ end
21
+
22
+ ApiKeyInfo = Data.define(
23
+ :id,
24
+ :name,
25
+ :prefix,
26
+ :scopes
27
+ ) do
28
+ include Model
29
+
30
+ def self.from_hash(data)
31
+ data = Convert.mapping(data)
32
+ new(
33
+ id: Convert.str(data["id"]),
34
+ name: Convert.str(data["name"]),
35
+ prefix: Convert.str(data["prefix"]),
36
+ scopes: Convert.strings(data["scopes"]),
37
+ raw: data
38
+ )
39
+ end
40
+ end
41
+
42
+ Subscription = Data.define(
43
+ :status,
44
+ :modules
45
+ ) do
46
+ include Model
47
+
48
+ def self.from_hash(data)
49
+ data = Convert.mapping(data)
50
+ new(
51
+ status: Convert.str(data["status"]),
52
+ modules: Convert.strings(data["modules"]),
53
+ raw: data
54
+ )
55
+ end
56
+ end
57
+
58
+ Features = Data.define(
59
+ :loyalty,
60
+ :inventory
61
+ ) do
62
+ include Model
63
+
64
+ def self.from_hash(data)
65
+ data = Convert.mapping(data)
66
+ new(
67
+ loyalty: Convert.bool(data["loyalty"]),
68
+ inventory: Convert.bool(data["inventory"]),
69
+ raw: data
70
+ )
71
+ end
72
+ end
73
+
74
+ Whoami = Data.define(
75
+ :restaurant,
76
+ :key,
77
+ :subscription,
78
+ :features
79
+ ) do
80
+ include Model
81
+
82
+ def self.from_hash(data)
83
+ data = Convert.mapping(data)
84
+ new(
85
+ restaurant: Convert.object(data["restaurant"], Restaurant),
86
+ key: Convert.object(data["key"], ApiKeyInfo),
87
+ subscription: Convert.object(data["subscription"], Subscription),
88
+ features: Convert.object(data["features"], Features),
89
+ raw: data
90
+ )
91
+ end
92
+ end
93
+
94
+ Category = Data.define(
95
+ :name,
96
+ :position,
97
+ :products,
98
+ :available
99
+ ) do
100
+ include Model
101
+
102
+ def self.from_hash(data)
103
+ data = Convert.mapping(data)
104
+ new(
105
+ name: Convert.str(data["name"]),
106
+ position: Convert.int(data["position"]),
107
+ products: Convert.int(data["products"]),
108
+ available: Convert.int(data["available"]),
109
+ raw: data
110
+ )
111
+ end
112
+ end
113
+
114
+ Modifier = Data.define(
115
+ :id,
116
+ :name,
117
+ :price_delta,
118
+ :position
119
+ ) do
120
+ include Model
121
+
122
+ def self.from_hash(data)
123
+ data = Convert.mapping(data)
124
+ new(
125
+ id: Convert.str(data["id"]),
126
+ name: Convert.str(data["name"]),
127
+ price_delta: Convert.float(data["priceDelta"]),
128
+ position: Convert.int(data["position"]),
129
+ raw: data
130
+ )
131
+ end
132
+ end
133
+
134
+ ModifierGroup = Data.define(
135
+ :id,
136
+ :name,
137
+ :required,
138
+ :position,
139
+ :modifiers
140
+ ) do
141
+ include Model
142
+
143
+ def self.from_hash(data)
144
+ data = Convert.mapping(data)
145
+ new(
146
+ id: Convert.str(data["id"]),
147
+ name: Convert.str(data["name"]),
148
+ required: Convert.bool(data["required"]),
149
+ position: Convert.int(data["position"]),
150
+ modifiers: Convert.list_of(data["modifiers"], Modifier),
151
+ raw: data
152
+ )
153
+ end
154
+ end
155
+
156
+ ProductTranslation = Data.define(
157
+ :name,
158
+ :description
159
+ ) do
160
+ include Model
161
+
162
+ def self.from_hash(data)
163
+ data = Convert.mapping(data)
164
+ new(
165
+ name: Convert.str(data["name"]),
166
+ description: Convert.str(data["description"]),
167
+ raw: data
168
+ )
169
+ end
170
+ end
171
+
172
+ Product = Data.define(
173
+ :id,
174
+ :name,
175
+ :category,
176
+ :description,
177
+ :price,
178
+ :available,
179
+ :popular,
180
+ :position,
181
+ :prep_minutes,
182
+ :station,
183
+ :vat_rate,
184
+ :vegetarian,
185
+ :spicy,
186
+ :allergens,
187
+ :discountable,
188
+ :has_modifiers,
189
+ :image,
190
+ :video,
191
+ :modifier_groups,
192
+ :translations
193
+ ) do
194
+ include Model
195
+
196
+ def self.from_hash(data)
197
+ data = Convert.mapping(data)
198
+ new(
199
+ id: Convert.str(data["id"]),
200
+ name: Convert.str(data["name"]),
201
+ category: Convert.str(data["category"]),
202
+ description: Convert.str(data["description"]),
203
+ price: Convert.float(data["price"]),
204
+ available: Convert.bool(data["available"]),
205
+ popular: Convert.bool(data["popular"]),
206
+ position: Convert.int(data["position"]),
207
+ prep_minutes: Convert.int(data["prepMinutes"]),
208
+ station: Convert.str(data["station"]),
209
+ vat_rate: Convert.float(data["vatRate"]),
210
+ vegetarian: Convert.bool(data["vegetarian"]),
211
+ spicy: Convert.bool(data["spicy"]),
212
+ allergens: Convert.strings(data["allergens"]),
213
+ discountable: Convert.bool(data["discountable"]),
214
+ has_modifiers: Convert.bool(data["hasModifiers"]),
215
+ image: Convert.str(data["image"]),
216
+ video: Convert.str(data["video"]),
217
+ modifier_groups: Convert.list_of(data["modifierGroups"], ModifierGroup),
218
+ translations: Convert.map_of(data["translations"], ProductTranslation),
219
+ raw: data
220
+ )
221
+ end
222
+ end
223
+
224
+ StopListItem = Data.define(
225
+ :id,
226
+ :name,
227
+ :category,
228
+ :price
229
+ ) do
230
+ include Model
231
+
232
+ def self.from_hash(data)
233
+ data = Convert.mapping(data)
234
+ new(
235
+ id: Convert.str(data["id"]),
236
+ name: Convert.str(data["name"]),
237
+ category: Convert.str(data["category"]),
238
+ price: Convert.float(data["price"]),
239
+ raw: data
240
+ )
241
+ end
242
+ end
243
+
244
+ ReservationGuest = Data.define(
245
+ :name,
246
+ :phone,
247
+ :email
248
+ ) do
249
+ include Model
250
+
251
+ def self.from_hash(data)
252
+ data = Convert.mapping(data)
253
+ new(
254
+ name: Convert.str(data["name"]),
255
+ phone: Convert.str(data["phone"]),
256
+ email: Convert.str(data["email"]),
257
+ raw: data
258
+ )
259
+ end
260
+ end
261
+
262
+ ReservationTable = Data.define(
263
+ :id,
264
+ :label
265
+ ) do
266
+ include Model
267
+
268
+ def self.from_hash(data)
269
+ data = Convert.mapping(data)
270
+ new(
271
+ id: Convert.str(data["id"]),
272
+ label: Convert.str(data["label"]),
273
+ raw: data
274
+ )
275
+ end
276
+ end
277
+
278
+ ReservationPreOrderItem = Data.define(
279
+ :product_id,
280
+ :name,
281
+ :price,
282
+ :qty,
283
+ :note
284
+ ) do
285
+ include Model
286
+
287
+ def self.from_hash(data)
288
+ data = Convert.mapping(data)
289
+ new(
290
+ product_id: Convert.str(data["productId"]),
291
+ name: Convert.str(data["name"]),
292
+ price: Convert.float(data["price"]),
293
+ qty: Convert.int(data["qty"]),
294
+ note: Convert.str(data["note"]),
295
+ raw: data
296
+ )
297
+ end
298
+ end
299
+
300
+ Reservation = Data.define(
301
+ :id,
302
+ :code,
303
+ :status,
304
+ :source,
305
+ :starts_at,
306
+ :ends_at,
307
+ :guests,
308
+ :zone,
309
+ :table,
310
+ :guest,
311
+ :special_request,
312
+ :allergy_note,
313
+ :birthday,
314
+ :child_chair,
315
+ :deposit_paid,
316
+ :pre_order,
317
+ :external_ref,
318
+ :decided_at,
319
+ :created_at,
320
+ :updated_at
321
+ ) do
322
+ include Model
323
+
324
+ def self.from_hash(data)
325
+ data = Convert.mapping(data)
326
+ new(
327
+ id: Convert.str(data["id"]),
328
+ code: Convert.str(data["code"]),
329
+ status: Convert.str(data["status"]),
330
+ source: Convert.str(data["source"]),
331
+ starts_at: Convert.time(data["startsAt"]),
332
+ ends_at: Convert.time(data["endsAt"]),
333
+ guests: Convert.int(data["guests"]),
334
+ zone: Convert.str(data["zone"]),
335
+ table: Convert.object(data["table"], ReservationTable),
336
+ guest: Convert.object(data["guest"], ReservationGuest),
337
+ special_request: Convert.str(data["specialRequest"]),
338
+ allergy_note: Convert.str(data["allergyNote"]),
339
+ birthday: Convert.bool(data["birthday"]),
340
+ child_chair: Convert.bool(data["childChair"]),
341
+ deposit_paid: Convert.float(data["depositPaid"]),
342
+ pre_order: Convert.list_of(data["preOrder"], ReservationPreOrderItem),
343
+ external_ref: Convert.str(data["externalRef"]),
344
+ decided_at: Convert.time(data["decidedAt"]),
345
+ created_at: Convert.time(data["createdAt"]),
346
+ updated_at: Convert.time(data["updatedAt"]),
347
+ raw: data
348
+ )
349
+ end
350
+ end
351
+
352
+ AvailableTable = Data.define(
353
+ :id,
354
+ :label,
355
+ :hall_id,
356
+ :zone,
357
+ :seats,
358
+ :free
359
+ ) do
360
+ include Model
361
+
362
+ def self.from_hash(data)
363
+ data = Convert.mapping(data)
364
+ new(
365
+ id: Convert.str(data["id"]),
366
+ label: Convert.str(data["label"]),
367
+ hall_id: Convert.str(data["hallId"]),
368
+ zone: Convert.str(data["zone"]),
369
+ seats: Convert.int(data["seats"]),
370
+ free: Convert.bool(data["free"]),
371
+ raw: data
372
+ )
373
+ end
374
+ end
375
+
376
+ TableAvailability = Data.define(
377
+ :starts_at,
378
+ :ends_at,
379
+ :duration_minutes,
380
+ :open_time,
381
+ :close_time,
382
+ :tables
383
+ ) do
384
+ include Model
385
+
386
+ def self.from_hash(data)
387
+ data = Convert.mapping(data)
388
+ new(
389
+ starts_at: Convert.time(data["startsAt"]),
390
+ ends_at: Convert.time(data["endsAt"]),
391
+ duration_minutes: Convert.int(data["durationMinutes"]),
392
+ open_time: Convert.str(data["openTime"]),
393
+ close_time: Convert.str(data["closeTime"]),
394
+ tables: Convert.list_of(data["tables"], AvailableTable),
395
+ raw: data
396
+ )
397
+ end
398
+ end
399
+
400
+ OrderItem = Data.define(
401
+ :id,
402
+ :product_id,
403
+ :name,
404
+ :qty,
405
+ :price,
406
+ :list_price,
407
+ :modifiers,
408
+ :note,
409
+ :status,
410
+ :comp,
411
+ :campaign,
412
+ :cancel_reason
413
+ ) do
414
+ include Model
415
+
416
+ def self.from_hash(data)
417
+ data = Convert.mapping(data)
418
+ new(
419
+ id: Convert.str(data["id"]),
420
+ product_id: Convert.str(data["productId"]),
421
+ name: Convert.str(data["name"]),
422
+ qty: Convert.int(data["qty"]),
423
+ price: Convert.float(data["price"]),
424
+ list_price: Convert.float(data["listPrice"]),
425
+ modifiers: Convert.str(data["modifiers"]),
426
+ note: Convert.str(data["note"]),
427
+ status: Convert.str(data["status"]),
428
+ comp: Convert.bool(data["comp"]),
429
+ campaign: Convert.str(data["campaign"]),
430
+ cancel_reason: Convert.str(data["cancelReason"]),
431
+ raw: data
432
+ )
433
+ end
434
+ end
435
+
436
+ DeliveryPlatform = Data.define(
437
+ :id,
438
+ :name,
439
+ :ref
440
+ ) do
441
+ include Model
442
+
443
+ def self.from_hash(data)
444
+ data = Convert.mapping(data)
445
+ new(
446
+ id: Convert.str(data["id"]),
447
+ name: Convert.str(data["name"]),
448
+ ref: Convert.str(data["ref"]),
449
+ raw: data
450
+ )
451
+ end
452
+ end
453
+
454
+ OrderDelivery = Data.define(
455
+ :status,
456
+ :platform,
457
+ :address,
458
+ :customer_phone,
459
+ :courier_name,
460
+ :note,
461
+ :payment_method,
462
+ :fee,
463
+ :platform_total,
464
+ :accepted_at
465
+ ) do
466
+ include Model
467
+
468
+ def self.from_hash(data)
469
+ data = Convert.mapping(data)
470
+ new(
471
+ status: Convert.str(data["status"]),
472
+ platform: Convert.object(data["platform"], DeliveryPlatform),
473
+ address: Convert.str(data["address"]),
474
+ customer_phone: Convert.str(data["customerPhone"]),
475
+ courier_name: Convert.str(data["courierName"]),
476
+ note: Convert.str(data["note"]),
477
+ payment_method: Convert.str(data["paymentMethod"]),
478
+ fee: Convert.float(data["fee"]),
479
+ platform_total: Convert.float(data["platformTotal"]),
480
+ accepted_at: Convert.time(data["acceptedAt"]),
481
+ raw: data
482
+ )
483
+ end
484
+ end
485
+
486
+ Order = Data.define(
487
+ :id,
488
+ :number,
489
+ :daily_number,
490
+ :kind,
491
+ :order_type,
492
+ :status,
493
+ :table_id,
494
+ :bill_id,
495
+ :customer_name,
496
+ :allergy_note,
497
+ :items,
498
+ :subtotal,
499
+ :delivery,
500
+ :created_at,
501
+ :updated_at
502
+ ) do
503
+ include Model
504
+
505
+ def self.from_hash(data)
506
+ data = Convert.mapping(data)
507
+ new(
508
+ id: Convert.str(data["id"]),
509
+ number: Convert.str(data["number"]),
510
+ daily_number: Convert.int(data["dailyNumber"]),
511
+ kind: Convert.str(data["kind"]),
512
+ order_type: Convert.str(data["orderType"]),
513
+ status: Convert.str(data["status"]),
514
+ table_id: Convert.str(data["tableId"]),
515
+ bill_id: Convert.str(data["billId"]),
516
+ customer_name: Convert.str(data["customerName"]),
517
+ allergy_note: Convert.str(data["allergyNote"]),
518
+ items: Convert.list_of(data["items"], OrderItem),
519
+ subtotal: Convert.float(data["subtotal"]),
520
+ delivery: Convert.object(data["delivery"], OrderDelivery),
521
+ created_at: Convert.time(data["createdAt"]),
522
+ updated_at: Convert.time(data["updatedAt"]),
523
+ raw: data
524
+ )
525
+ end
526
+ end
527
+
528
+ Bill = Data.define(
529
+ :id,
530
+ :table_id,
531
+ :status,
532
+ :guests,
533
+ :waiter,
534
+ :customer_id,
535
+ :reservation_id,
536
+ :order_ids,
537
+ :subtotal,
538
+ :discount_percent,
539
+ :bill_discount,
540
+ :service_fee_percent,
541
+ :service_fee,
542
+ :total,
543
+ :paid,
544
+ :remaining,
545
+ :opened_at,
546
+ :closed_at
547
+ ) do
548
+ include Model
549
+
550
+ def self.from_hash(data)
551
+ data = Convert.mapping(data)
552
+ new(
553
+ id: Convert.str(data["id"]),
554
+ table_id: Convert.str(data["tableId"]),
555
+ status: Convert.str(data["status"]),
556
+ guests: Convert.int(data["guests"]),
557
+ waiter: Convert.str(data["waiter"]),
558
+ customer_id: Convert.str(data["customerId"]),
559
+ reservation_id: Convert.str(data["reservationId"]),
560
+ order_ids: Convert.strings(data["orderIds"]),
561
+ subtotal: Convert.float(data["subtotal"]),
562
+ discount_percent: Convert.float(data["discountPercent"]),
563
+ bill_discount: Convert.float(data["billDiscount"]),
564
+ service_fee_percent: Convert.float(data["serviceFeePercent"]),
565
+ service_fee: Convert.float(data["serviceFee"]),
566
+ total: Convert.float(data["total"]),
567
+ paid: Convert.float(data["paid"]),
568
+ remaining: Convert.float(data["remaining"]),
569
+ opened_at: Convert.time(data["openedAt"]),
570
+ closed_at: Convert.time(data["closedAt"]),
571
+ raw: data
572
+ )
573
+ end
574
+ end
575
+
576
+ PaymentCard = Data.define(
577
+ :masked_pan,
578
+ :scheme,
579
+ :bank
580
+ ) do
581
+ include Model
582
+
583
+ def self.from_hash(data)
584
+ data = Convert.mapping(data)
585
+ new(
586
+ masked_pan: Convert.str(data["maskedPan"]),
587
+ scheme: Convert.str(data["scheme"]),
588
+ bank: Convert.str(data["bank"]),
589
+ raw: data
590
+ )
591
+ end
592
+ end
593
+
594
+ PaymentPlatform = Data.define(
595
+ :id,
596
+ :name
597
+ ) do
598
+ include Model
599
+
600
+ def self.from_hash(data)
601
+ data = Convert.mapping(data)
602
+ new(
603
+ id: Convert.str(data["id"]),
604
+ name: Convert.str(data["name"]),
605
+ raw: data
606
+ )
607
+ end
608
+ end
609
+
610
+ Payment = Data.define(
611
+ :id,
612
+ :status,
613
+ :method,
614
+ :recorded_method,
615
+ :amount,
616
+ :tip,
617
+ :refunded_amount,
618
+ :refunded_at,
619
+ :refund_reason,
620
+ :bill_id,
621
+ :reservation_id,
622
+ :order_id,
623
+ :taken_at,
624
+ :card,
625
+ :platform,
626
+ :created_at,
627
+ :settled_at
628
+ ) do
629
+ include Model
630
+
631
+ def self.from_hash(data)
632
+ data = Convert.mapping(data)
633
+ new(
634
+ id: Convert.str(data["id"]),
635
+ status: Convert.str(data["status"]),
636
+ method: Convert.str(data["method"]),
637
+ recorded_method: Convert.str(data["recordedMethod"]),
638
+ amount: Convert.float(data["amount"]),
639
+ tip: Convert.float(data["tip"]),
640
+ refunded_amount: Convert.float(data["refundedAmount"]),
641
+ refunded_at: Convert.time(data["refundedAt"]),
642
+ refund_reason: Convert.str(data["refundReason"]),
643
+ bill_id: Convert.str(data["billId"]),
644
+ reservation_id: Convert.str(data["reservationId"]),
645
+ order_id: Convert.str(data["orderId"]),
646
+ taken_at: Convert.str(data["takenAt"]),
647
+ card: Convert.object(data["card"], PaymentCard),
648
+ platform: Convert.object(data["platform"], PaymentPlatform),
649
+ created_at: Convert.time(data["createdAt"]),
650
+ settled_at: Convert.time(data["settledAt"]),
651
+ raw: data
652
+ )
653
+ end
654
+ end
655
+
656
+ Hall = Data.define(
657
+ :id,
658
+ :name,
659
+ :position
660
+ ) do
661
+ include Model
662
+
663
+ def self.from_hash(data)
664
+ data = Convert.mapping(data)
665
+ new(
666
+ id: Convert.str(data["id"]),
667
+ name: Convert.str(data["name"]),
668
+ position: Convert.int(data["position"]),
669
+ raw: data
670
+ )
671
+ end
672
+ end
673
+
674
+ Table = Data.define(
675
+ :id,
676
+ :label,
677
+ :hall_id,
678
+ :zone,
679
+ :seats,
680
+ :shape,
681
+ :status,
682
+ :guests,
683
+ :waiter,
684
+ :seated_since,
685
+ :open_orders,
686
+ :bill_id,
687
+ :bill_total,
688
+ :bill_requested,
689
+ :bill_settled,
690
+ :merged_into
691
+ ) do
692
+ include Model
693
+
694
+ def self.from_hash(data)
695
+ data = Convert.mapping(data)
696
+ new(
697
+ id: Convert.str(data["id"]),
698
+ label: Convert.str(data["label"]),
699
+ hall_id: Convert.str(data["hallId"]),
700
+ zone: Convert.str(data["zone"]),
701
+ seats: Convert.int(data["seats"]),
702
+ shape: Convert.str(data["shape"]),
703
+ status: Convert.str(data["status"]),
704
+ guests: Convert.int(data["guests"]),
705
+ waiter: Convert.str(data["waiter"]),
706
+ seated_since: Convert.str(data["seatedSince"]),
707
+ open_orders: Convert.int(data["openOrders"]),
708
+ bill_id: Convert.str(data["billId"]),
709
+ bill_total: Convert.float(data["billTotal"]),
710
+ bill_requested: Convert.bool(data["billRequested"]),
711
+ bill_settled: Convert.bool(data["billSettled"]),
712
+ merged_into: Convert.str(data["mergedInto"]),
713
+ raw: data
714
+ )
715
+ end
716
+ end
717
+
718
+ Customer = Data.define(
719
+ :id,
720
+ :name,
721
+ :phone,
722
+ :note,
723
+ :created_at,
724
+ :updated_at
725
+ ) do
726
+ include Model
727
+
728
+ def self.from_hash(data)
729
+ data = Convert.mapping(data)
730
+ new(
731
+ id: Convert.str(data["id"]),
732
+ name: Convert.str(data["name"]),
733
+ phone: Convert.str(data["phone"]),
734
+ note: Convert.str(data["note"]),
735
+ created_at: Convert.time(data["createdAt"]),
736
+ updated_at: Convert.time(data["updatedAt"]),
737
+ raw: data
738
+ )
739
+ end
740
+ end
741
+
742
+ LoyaltyProgram = Data.define(
743
+ :stamps_needed,
744
+ :earn_by,
745
+ :min_bill,
746
+ :once_per_day,
747
+ :reward_name,
748
+ :reward_scope,
749
+ :reward_categories,
750
+ :reward_product_ids,
751
+ :reward_max_price,
752
+ :terms
753
+ ) do
754
+ include Model
755
+
756
+ def self.from_hash(data)
757
+ data = Convert.mapping(data)
758
+ new(
759
+ stamps_needed: Convert.int(data["stampsNeeded"]),
760
+ earn_by: Convert.str(data["earnBy"]),
761
+ min_bill: Convert.float(data["minBill"]),
762
+ once_per_day: Convert.bool(data["oncePerDay"]),
763
+ reward_name: Convert.str(data["rewardName"]),
764
+ reward_scope: Convert.str(data["rewardScope"]),
765
+ reward_categories: Convert.strings(data["rewardCategories"]),
766
+ reward_product_ids: Convert.strings(data["rewardProductIds"]),
767
+ reward_max_price: Convert.float(data["rewardMaxPrice"]),
768
+ terms: Convert.str(data["terms"]),
769
+ raw: data
770
+ )
771
+ end
772
+ end
773
+
774
+ LoyaltyCard = Data.define(
775
+ :id,
776
+ :name,
777
+ :phone,
778
+ :stamps,
779
+ :total_stamps,
780
+ :redeemed,
781
+ :source,
782
+ :last_visit_at,
783
+ :created_at,
784
+ :updated_at
785
+ ) do
786
+ include Model
787
+
788
+ def self.from_hash(data)
789
+ data = Convert.mapping(data)
790
+ new(
791
+ id: Convert.str(data["id"]),
792
+ name: Convert.str(data["name"]),
793
+ phone: Convert.str(data["phone"]),
794
+ stamps: Convert.int(data["stamps"]),
795
+ total_stamps: Convert.int(data["totalStamps"]),
796
+ redeemed: Convert.int(data["redeemed"]),
797
+ source: Convert.str(data["source"]),
798
+ last_visit_at: Convert.time(data["lastVisitAt"]),
799
+ created_at: Convert.time(data["createdAt"]),
800
+ updated_at: Convert.time(data["updatedAt"]),
801
+ raw: data
802
+ )
803
+ end
804
+ end
805
+
806
+ Ingredient = Data.define(
807
+ :id,
808
+ :name,
809
+ :unit,
810
+ :stock,
811
+ :on_open_bills,
812
+ :available,
813
+ :state,
814
+ :low_stock,
815
+ :par_stock,
816
+ :cost_per_unit,
817
+ :value,
818
+ :prepared,
819
+ :by_store,
820
+ :updated_at
821
+ ) do
822
+ include Model
823
+
824
+ def self.from_hash(data)
825
+ data = Convert.mapping(data)
826
+ new(
827
+ id: Convert.str(data["id"]),
828
+ name: Convert.str(data["name"]),
829
+ unit: Convert.str(data["unit"]),
830
+ stock: Convert.float(data["stock"]),
831
+ on_open_bills: Convert.float(data["onOpenBills"]),
832
+ available: Convert.float(data["available"]),
833
+ state: Convert.str(data["state"]),
834
+ low_stock: Convert.float(data["lowStock"]),
835
+ par_stock: Convert.float(data["parStock"]),
836
+ cost_per_unit: Convert.float(data["costPerUnit"]),
837
+ value: Convert.float(data["value"]),
838
+ prepared: Convert.bool(data["prepared"]),
839
+ by_store: Convert.floats(data["byStore"]),
840
+ updated_at: Convert.time(data["updatedAt"]),
841
+ raw: data
842
+ )
843
+ end
844
+ end
845
+
846
+ StockStore = Data.define(
847
+ :id,
848
+ :name,
849
+ :is_default,
850
+ :stations
851
+ ) do
852
+ include Model
853
+
854
+ def self.from_hash(data)
855
+ data = Convert.mapping(data)
856
+ new(
857
+ id: Convert.str(data["id"]),
858
+ name: Convert.str(data["name"]),
859
+ is_default: Convert.bool(data["isDefault"]),
860
+ stations: Convert.strings(data["stations"]),
861
+ raw: data
862
+ )
863
+ end
864
+ end
865
+
866
+ StockMove = Data.define(
867
+ :id,
868
+ :ingredient_id,
869
+ :qty,
870
+ :reason,
871
+ :order_id,
872
+ :invoice_id,
873
+ :store_id,
874
+ :note,
875
+ :created_at
876
+ ) do
877
+ include Model
878
+
879
+ def self.from_hash(data)
880
+ data = Convert.mapping(data)
881
+ new(
882
+ id: Convert.str(data["id"]),
883
+ ingredient_id: Convert.str(data["ingredientId"]),
884
+ qty: Convert.float(data["qty"]),
885
+ reason: Convert.str(data["reason"]),
886
+ order_id: Convert.str(data["orderId"]),
887
+ invoice_id: Convert.str(data["invoiceId"]),
888
+ store_id: Convert.str(data["storeId"]),
889
+ note: Convert.str(data["note"]),
890
+ created_at: Convert.time(data["createdAt"]),
891
+ raw: data
892
+ )
893
+ end
894
+ end
895
+
896
+ ReviewRatings = Data.define(
897
+ :food,
898
+ :service,
899
+ :atmosphere,
900
+ :cleanliness,
901
+ :price
902
+ ) do
903
+ include Model
904
+
905
+ def self.from_hash(data)
906
+ data = Convert.mapping(data)
907
+ new(
908
+ food: Convert.float(data["food"]),
909
+ service: Convert.float(data["service"]),
910
+ atmosphere: Convert.float(data["atmosphere"]),
911
+ cleanliness: Convert.float(data["cleanliness"]),
912
+ price: Convert.float(data["price"]),
913
+ raw: data
914
+ )
915
+ end
916
+ end
917
+
918
+ Review = Data.define(
919
+ :id,
920
+ :author,
921
+ :overall,
922
+ :ratings,
923
+ :body,
924
+ :visit_type,
925
+ :visited_on,
926
+ :verified,
927
+ :reply,
928
+ :replied_at,
929
+ :created_at
930
+ ) do
931
+ include Model
932
+
933
+ def self.from_hash(data)
934
+ data = Convert.mapping(data)
935
+ new(
936
+ id: Convert.str(data["id"]),
937
+ author: Convert.str(data["author"]),
938
+ overall: Convert.float(data["overall"]),
939
+ ratings: Convert.object(data["ratings"], ReviewRatings),
940
+ body: Convert.str(data["body"]),
941
+ visit_type: Convert.str(data["visitType"]),
942
+ visited_on: Convert.time(data["visitedOn"]),
943
+ verified: Convert.bool(data["verified"]),
944
+ reply: Convert.str(data["reply"]),
945
+ replied_at: Convert.time(data["repliedAt"]),
946
+ created_at: Convert.time(data["createdAt"]),
947
+ raw: data
948
+ )
949
+ end
950
+ end
951
+ end