text: # coding=utf-8
  
  """
  API Client version 5
  """
  
  import json
  
  from retailcrm.versions.base import Base
  
  
  class Client(Base):
      """RetailCRM API client"""
  
      apiVersion = 'v5'
  
      def __init__(self, crm_url, api_key):
          Base.__init__(self, crm_url, api_key, self.apiVersion)
  
      def costs(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/costs')
  
      def cost_create(self, cost, site=None):
          """
          :param cost: object
          :param site: string
          :return: Response
          """
          self.parameters['cost'] = json.dumps(cost)
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/costs/create')
  
      def costs_delete(self, ids):
          """
          :param ids: array of integers
          :return: Response
          """
          self.parameters['ids'] = json.dumps(ids)
  
          return self.post('/costs/delete')
  
      def costs_upload(self, costs):
          """
          :param costs: array of objects
          :return: Response
          """
          self.parameters['costs'] = json.dumps(costs)
  
          return self.post('/costs/upload')
  
      def cost(self, uid):
          """
          :param uid: string
          :return: Response
          """
  
          return self.get('/costs/' + str(uid))
  
      def cost_delete(self, uid):
          """
          :param uid: string
          :return: Response
          """
  
          return self.post('/costs/' + str(uid) + '/delete')
  
      def cost_edit(self, cost, site=None):
          """
          :param cost: object
          :param site: string
          :return: Response
          """
          self.parameters['cost'] = json.dumps(cost)
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/costs/' + str(cost['id']) + '/edit')
  
      def custom_fields(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/custom-fields')
  
      def custom_dictionaries(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/custom-fields/dictionaries')
  
      def custom_dictionary_create(self, dictionary):
          """
          :param dictionary: object
          :return: Response
          """
          self.parameters['customDictionary'] = json.dumps(dictionary)
  
          return self.post('/custom-fields/dictionaries/create')
  
      def custom_dictionary(self, code):
          """
          :param code: string
          :return: Response
          """
  
          return self.get('/custom-fields/dictionaries/' + str(code))
  
      def custom_dictionary_edit(self, dictionary):
          """
          :param dictionary: object
          :return: Response
          """
          self.parameters['customDictionary'] = json.dumps(dictionary)
  
          return self.post('/custom-fields/dictionaries/' + str(dictionary['code']) + '/edit')
  
      def custom_field_create(self, field):
          """
          :param field: object
          :return: Response
          """
          self.parameters['customField'] = json.dumps(field)
  
          return self.post('/custom-fields/' + str(field['entity']) + '/create')
  
      def custom_field(self, code, entity):
          """
          :param code: string
          :param entity: string
          :return: Response
          """
  
          return self.get('/custom-fields/' + str(entity) + '/' + str(code))
  
      def custom_field_edit(self, field):
          """
          :param field: object
          :return: Response
          """
  
          entity = str(field['entity'])
          code = str(field['code'])
          self.parameters['customField'] = json.dumps(field)
  
          return self.post('/custom-fields/' + entity + '/' + code + '/edit')
  
      def customers(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/customers')
  
      def customers_combine(self, customers, result):
          """
          :param customers: array of object
          :param result: object
          :return: Response
          """
          self.parameters['customers'] = json.dumps(customers)
          self.parameters['resultCustomer'] = json.dumps(result)
  
          return self.post('/customers/combine')
  
      def customer_create(self, customer, site=None):
          """
          :param customer: object
          :param site: string
          :return: Response
          """
          self.parameters['customer'] = json.dumps(customer)
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/customers/create')
  
      def customers_fix_external_ids(self, customers, site=None):
          """
          :param customers: array of objects
          :param site: string
          :return: Response
          """
          self.parameters['customers'] = json.dumps(customers)
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/customers/fix-external-ids')
  
      def customers_history(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/customers/history')
  
      def customer_notes(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/customers/notes')
  
      def customer_note_create(self, note, site=None):
          """
          :param note: object
          :param site: string
          :return: Response
          """
          self.parameters['note'] = json.dumps(note)
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/customers/notes/create')
  
      def customer_note_delete(self, uid):
          """
          :param uid: integer
          :return: Response
          """
  
          return self.post('/customers/notes/' + str(uid) + '/delete')
  
      def customers_upload(self, customers, site=None):
          """
          :param customers: array of objects
          :param site: string
          :return: Response
          """
          self.parameters['customers'] = json.dumps(customers)
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/customers/upload')
  
      def customer(self, uid, uid_type='externalId', site=None):
          """
          :param uid: string
          :param uid_type: string
          :param site: string
          :return: Response
          """
          if uid_type != 'externalId':
              self.parameters['by'] = uid_type
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.get('/customers/' + str(uid))
  
      def customer_edit(self, customer, uid_type='externalId', site=None):
          """
          :param customer: object
          :param uid_type: string
          :param site: string
          :return: Response
          """
          self.parameters['customer'] = json.dumps(customer)
  
          if uid_type != 'externalId':
              self.parameters['by'] = uid_type
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/customers/' + str(customer[uid_type]) + '/edit')
  
      def customers_corporate(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/customers-corporate')
  
      def customers_combine_corporate(self, customers, result):
          """
          :param customers: array of object
          :param result: object
          :return: Response
          """
          self.parameters['customers'] = json.dumps(customers)
          self.parameters['resultCustomer'] = json.dumps(result)
  
          return self.post('/customers-corporate/combine')
  
      def customer_corporate_create(self, customer_corporate, site=None):
          """
          :param customer_corporate: object
          :param site: string
          :return: Response
          """
          self.parameters['customerCorporate'] = json.dumps(customer_corporate)
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/customers-corporate/create')
  
      def customers_corporate_fix_external_ids(self, customers_corporate, site=None):
          """
          :param customers_corporate: array of objects
          :param site: string
          :return: Response
          """
          self.parameters['customersCorporate'] = json.dumps(customers_corporate)
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/customers-corporate/fix-external-ids')
  
      def customers_corporate_history(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/customers-corporate/history')
  
      def customer_corporate_notes(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/customers-corporate/notes')
  
      def customer_corporate_note_create(self, note, site=None):
          """
          :param note: object
          :param site: string
          :return: Response
          """
          self.parameters['note'] = json.dumps(note)
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/customers-corporate/notes/create')
  
      def customer_corporate_note_delete(self, uid):
          """
          :param uid: integer
          :return: Response
          """
  
          return self.post('/customers-corporate/notes/' + str(uid) + '/delete')
  
      def customers_corporate_upload(self, customers_corporate, site=None):
          """
          :param customers_corporate: array of objects
          :param site: string
          :return: Response
          """
          self.parameters['customersCorporate'] = json.dumps(customers_corporate)
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/customers-corporate/upload')
  
      def customer_corporate(self, uid, uid_type='externalId', site=None):
          """
          :param uid: string
          :param uid_type: string
          :param site: string
          :return: Response
          """
          if uid_type != 'externalId':
              self.parameters['by'] = uid_type
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.get('/customers-corporate/' + str(uid))
  
      def customer_corporate_addresses(self, uid, uid_type='externalId', limit=20, page=1, filters=None, site=None):
          """
          :param filters: object
          :param uid: string
          :param uid_type: string
          :param site: string
          :param limit: integer
          :param page: integer
          :return: Response
          """
  
          if uid_type != 'externalId':
              self.parameters['by'] = uid_type
  
          if site is not None:
              self.parameters['site'] = site
  
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/customers-corporate/' + str(uid) + '/addresses')
  
      def customer_corporate_addresses_create(self, address, uid_type='externalId', site=None):
          """
          :param address: object
          :param uid_type: string
          :param site: string
          :return: Response
          """
          self.parameters['address'] = json.dumps(address)
  
          if uid_type != 'externalId':
              self.parameters['by'] = uid_type
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/customers-corporate/' + str(address[uid_type]) + '/addresses/create')
  
      def customer_corporate_addresses_edit(self,
                                            uid_corporate,
                                            address,
                                            uid_type='externalId',
                                            entity_by='externalId',
                                            site=None):
          """
          :param address: object
          :param uid_corporate: string
          :param uid_type: string
          :param entity_by: string
          :param site: string
          :return: Response
          """
          self.parameters['address'] = json.dumps(address)
  
          if uid_type != 'externalId':
              self.parameters['by'] = uid_type
  
          if entity_by != 'externalId':
              self.parameters['entityBy'] = entity_by
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post("".join(
              [
                  '/customers-corporate/',
                  str(uid_corporate),
                  '/addresses/',
                  str(address[entity_by]),
                  '/edit'
              ]
          ))
  
      def customer_corporate_companies(self, uid, uid_type='externalId', limit=20, page=1, filters=None, site=None):
          """
          :param filters: object
          :param uid: string
          :param uid_type: string
          :param site: string
          :param limit: integer
          :param page: integer
          :return: Response
          """
  
          if uid_type != 'externalId':
              self.parameters['by'] = uid_type
  
          if site is not None:
              self.parameters['site'] = site
  
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/customers-corporate/' + str(uid) + '/companies')
  
      def customer_corporate_companies_create(self, company, uid_type='externalId', site=None):
          """
          :param company: object
          :param uid_type: string
          :param site: string
          :return: Response
          """
          self.parameters['company'] = json.dumps(company)
  
          if uid_type != 'externalId':
              self.parameters['by'] = uid_type
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/customers-corporate/' + str(company[uid_type]) + '/companies/create')
  
      def customer_corporate_companies_edit(self,
                                            uid_corporate,
                                            company,
                                            uid_type='externalId',
                                            entity_by='externalId',
                                            site=None):
          """
          :param company: object
          :param uid_corporate: string
          :param uid_type: string
          :param entity_by: string
          :param site: string
          :return: Response
          """
          self.parameters['company'] = json.dumps(company)
  
          if uid_type != 'externalId':
              self.parameters['by'] = uid_type
  
          if entity_by != 'externalId':
              self.parameters['entityBy'] = entity_by
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/customers-corporate/' + str(uid_corporate) + '/companies/' + str(company[entity_by]) + '/edit')
  
      def customer_corporate_contacts(self, uid, uid_type='externalId', limit=20, page=1, filters=None, site=None):
          """
          :param filters: object
          :param uid: string
          :param uid_type: string
          :param site: string
          :param limit: integer
          :param page: integer
          :return: Response
          """
  
          if uid_type != 'externalId':
              self.parameters['by'] = uid_type
  
          if site is not None:
              self.parameters['site'] = site
  
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/customers-corporate/' + str(uid) + '/contacts')
  
      def customer_corporate_contacts_create(self, contact, uid_type='externalId', site=None):
          """
          :param contact: object
          :param uid_type: string
          :param site: string
          :return: Response
          """
          self.parameters['contact'] = json.dumps(contact)
  
          if uid_type != 'externalId':
              self.parameters['by'] = uid_type
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/customers-corporate/' + str(contact[uid_type]) + '/contacts/create')
  
      def customer_corporate_contacts_edit(self,
                                           uid_corporate,
                                           contact,
                                           uid_type='externalId',
                                           entity_by='externalId',
                                           site=None):
          """
          :param contact: object
          :param uid_corporate: string
          :param uid_type: string
          :param entity_by: string
          :param site: string
          :return: Response
          """
          self.parameters['contact'] = json.dumps(contact)
  
          if uid_type != 'externalId':
              self.parameters['by'] = uid_type
  
          if entity_by != 'externalId':
              self.parameters['entityBy'] = entity_by
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/customers-corporate/' + str(uid_corporate) + '/contacts/' + str(contact[entity_by]) + '/edit')
  
      def customer_corporate_edit(self, customer_corporate, uid_type='externalId', site=None):
          """
          :param customer_corporate: object
          :param uid_type: string
          :param site: string
          :return: Response
          """
          self.parameters['customersCorporate'] = json.dumps(customer_corporate)
  
          if uid_type != 'externalId':
              self.parameters['by'] = uid_type
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/customers-corporate/' + str(customer_corporate[uid_type]) + '/edit')
  
      def delivery_tracking(self, code, status_update):
          """
          :param code: string
          :param status_update: array of objects
          :return: Response
          """
          self.parameters['statusUpdate'] = json.dumps(status_update)
  
          return self.post('/delivery/generic/' + str(code) + '/tracking')
  
      def delivery_shipments(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/delivery/shipments')
  
      def delivery_shipment_create(self, shipment, site=None):
          """
          :param shipment: object
          :param site: string
          :return: Response
          """
          self.parameters['deliveryShipment'] = json.dumps(shipment)
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/delivery/shipments/create')
  
      def delivery_shipment(self, uid):
          """
          :param uid: string
          :return: Response
          """
  
          return self.get('/delivery/shipments/' + str(uid))
  
      def delivery_shipment_edit(self, shipment, site=None):
          """
          :param shipment: object
          :param site: string
          :return: Response
          """
          self.parameters['deliveryShipment'] = json.dumps(shipment)
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/delivery/shipment/' + str(shipment['id']) + '/edit')
  
      def files(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/files')
  
      def files_upload(self, file, site=None):
          """
          :param file: objects
          :param site: string
          :return: Response
          """
  
          self.parameters['file'] = file
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/files/upload')
  
      def file(self, uid):
          """
          :param uid: integer
          :return: Response
          """
          return self.get('/files/' + str(uid))
  
      def files_delete(self, uid):
          """
          :param uid: integer
          :return: Response
          """
  
          return self.post('/files/' + str(uid) + '/delete')
  
      def files_download(self, uid):
          """
          :param uid: integer
          :return: Response
          """
  
          return self.get('/files/' + str(uid) + '/download')
  
      def files_edit(self, file):
          """
          :param file: object
          :return: Response
          """
          self.parameters['file'] = json.dumps(file)
  
          return self.post('/files/' + str(file['id']) + '/edit')
  
      def integration_module(self, code):
          """
          :param code: integer
          :return: Response
          """
  
          return self.get('/integration-modules/' + str(code))
  
      def integration_module_edit(self, configuration):
          """
          :param configuration: object
          :return: Response
          """
          self.parameters['integrationModule'] = json.dumps(configuration)
  
          return self.post('/integration-modules/' + str(configuration['code']) + '/edit')
  
      def orders(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/orders')
  
      def orders_combine(self, order, result_order, technique='ours'):
          """
          :param order: object
          :param result_order: object
          :param technique: string
          :return: Response
          """
          self.parameters['technique'] = technique
          self.parameters['order'] = json.dumps(order)
          self.parameters['resultOrder'] = json.dumps(result_order)
  
          return self.post('/orders/combine')
  
      def order_create(self, order, site=None):
          """
          :param order: object
          :param site: string
          :return: Response
          """
          self.parameters['order'] = json.dumps(order)
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/orders/create')
  
      def orders_fix_external_ids(self, orders, site=None):
          """
          :param orders: object
          :param site: string
          :return: Response
          """
          self.parameters['orders'] = json.dumps(orders)
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/orders/fix-external-ids')
  
      def orders_history(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/orders/history')
  
      def order_links_create(self, link, site=None):
          """
          :param link: object
          :param site: string
          :return: Response
          """
          self.parameters['link'] = json.dumps(link)
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/orders/links/create')
  
      def order_payment_create(self, payment, site=None):
          """
          :param payment: object
          :param site: string
          :return: Response
          """
          self.parameters['payment'] = json.dumps(payment)
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/orders/payments/create')
  
      def order_payment_delete(self, uid):
          """
          :param uid: string
          :return: Response
          """
  
          return self.post('/orders/payments/' + str(uid) + '/delete')
  
      def order_payment_edit(self, payment, uid_type='externalId', site=None):
          """
          :param payment: object
          :param uid_type: string
          :param site: string
          :return: Response
          """
          self.parameters['payment'] = json.dumps(payment)
          if uid_type != 'externalId':
              self.parameters['by'] = uid_type
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/orders/payments/' + str(payment[uid_type]) + '/edit')
  
      def orders_statuses(self, ids, external_ids):
          """
          :param ids: array
          :param external_ids: array
          :return: Response
          """
          self.parameters['ids'] = ids
          self.parameters['externalIds'] = external_ids
  
          return self.get('/orders/statuses')
  
      def orders_upload(self, orders, site=None):
          """
          :param orders: object
          :param site: string
          :return: Response
          """
          self.parameters['orders'] = json.dumps(orders)
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/orders/upload')
  
      def order(self, uid, uid_type='externalId', site=None):
          """
          :param uid: string
          :param uid_type: string
          :param site: string
          :return: Response
          """
          if site is not None:
              self.parameters['site'] = site
  
          if uid_type != 'externalId':
              self.parameters['by'] = uid_type
  
          return self.get('/orders/' + str(uid))
  
      def order_edit(self, order, uid_type='externalId', site=None):
          """
          :param order: object
          :param uid_type: string
          :param site: string
          :return: Response
          """
          self.parameters['order'] = json.dumps(order)
  
          if site is not None:
              self.parameters['site'] = site
  
          if uid_type != 'externalId':
              self.parameters['by'] = uid_type
  
          return self.post('/orders/' + str(order[uid_type]) + '/edit')
  
      def packs(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/orders/packs')
  
      def pack_create(self, pack):
          """
          :param pack: object
          :return: Response
          """
          self.parameters['pack'] = json.dumps(pack)
  
          return self.post('/orders/packs/create')
  
      def packs_history(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/orders/packs/history')
  
      def pack(self, uid):
          """
          :param uid: integer
          :return: Response
          """
  
          return self.get('/orders/packs/' + str(uid))
  
      def pack_delete(self, uid):
          """
          :param uid: integer
          :return: Response
          """
  
          return self.post('/orders/packs/' + str(uid) + '/delete')
  
      def payment_check(self, check):
          """
          :param check: object
          :return: Response
          """
          self.parameters['check'] = json.dumps(check)
  
          return self.post('/payment/check')
  
      def payment_create_invoice(self, create_invoice):
          """
          :param create_invoice: object
          :return: Response
          """
          self.parameters['createInvoice'] = json.dumps(create_invoice)
  
          return self.post('/payment/create-invoice')
  
      def payment_update_invoice(self, update_invoice):
          """
          :param update_invoice: object
          :return: Response
          """
          self.parameters['updateInvoice'] = json.dumps(update_invoice)
  
          return self.post('/payment/update-invoice')
  
      def pack_edit(self, pack):
          """
          :param pack: object
          :return: Response
          """
          self.parameters['pack'] = json.dumps(pack)
  
          return self.post('/orders/packs/' + str(pack['id']) + '/edit')
  
      def cost_groups(self):
          """
          :return: Response
          """
  
          return self.get('/reference/cost-groups')
  
      def cost_groups_edit(self, cost_group):
          """
          :param cost_group: array of objects
          :return: Response
          """
          self.parameters['costGroup'] = json.dumps(cost_group)
  
          return self.post('/reference/cost-groups/' + cost_group['code'] + '/edit')
  
      def cost_items(self):
          """
          :return: Response
          """
  
          return self.get('/reference/cost-items')
  
      def cost_items_edit(self, cost_item):
          """
          :param cost_item: array of objects
          :return: Response
          """
          self.parameters['costItem'] = json.dumps(cost_item)
  
          return self.post('/reference/cost-groups/' + cost_item['code'] + '/edit')
  
      def countries(self):
          """
          :return: Response
          """
  
          return self.get('/reference/countries')
  
      def couriers(self):
          """
          :return: Response
          """
  
          return self.get('/reference/couriers')
  
      def couriers_create(self, courier):
          """
          :param courier: array of objects
          :return: Response
          """
          self.parameters['courier'] = json.dumps(courier)
  
          return self.post('/reference/couriers/create')
  
      def couriers_edit(self, courier):
          """
          :param courier: object
          :return: Response
          """
          self.parameters['courier'] = json.dumps(courier)
  
          return self.post('/reference/couriers/' + str(courier['id']) + '/edit')
  
      def delivery_services(self):
          """
          :return: Response
          """
  
          return self.get('/reference/delivery-services')
  
      def delivery_services_edit(self, delivery_service):
          """
          :param delivery_service:
          :return: Response
          """
          self.parameters['deliveryService'] = json.dumps(delivery_service)
  
          return self.post('/reference/delivery-services/' + delivery_service['code'] + '/edit')
  
      def delivery_types(self):
          """
          :return: Response
          """
  
          return self.get('/reference/delivery-types')
  
      def delivery_types_edit(self, delivery_type):
          """
          :param delivery_type: object
          :return: Response
          """
          self.parameters['deliveryType'] = json.dumps(delivery_type)
  
          return self.post('/reference/delivery-types/' + delivery_type['code'] + '/edit')
  
      def legal_entities(self):
          """
          :return: Response
          """
  
          return self.get('/reference/legal-entities')
  
      def legal_entities_edit(self, legal_entity):
          """
          :param legal_entity: object
          :return: Response
          """
          self.parameters['legalEntity'] = json.dumps(legal_entity)
  
          return self.post('/reference/legal-entities/' + legal_entity['code'] + '/edit')
  
      def mg_channels(self):
          """
          :return: Response
          """
  
          return self.get('/reference/mg-channels')
  
      def order_methods(self):
          """
          :return: Response
          """
  
          return self.get('/reference/order-methods')
  
      def order_methods_edit(self, order_method):
          """
  
          :param order_method: object
          :return: Response
          """
          self.parameters['orderMethod'] = json.dumps(order_method)
  
          return self.post('/reference/order-methods/' + order_method['code'] + '/edit')
  
      def order_types(self):
          """
          :return: Response
          """
  
          return self.get('/reference/order-types')
  
      def order_types_edit(self, order_type):
          """
          :param order_type: object
          :return: Response
          """
          self.parameters['orderType'] = json.dumps(order_type)
  
          return self.post('/reference/order-types/' + order_type['code'] + '/edit')
  
      def payment_statuses(self):
          """
          :return: Response
          """
  
          return self.get('/reference/payment-statuses')
  
      def payment_statuses_edit(self, payment_status):
          """
          :param payment_status: object
          :return: Response
          """
          self.parameters['paymentStatus'] = json.dumps(payment_status)
  
          return self.post('/reference/payment-statuses/' + payment_status['code'] + '/edit')
  
      def payment_types(self):
          """
          :return: Response
          """
  
          return self.get('/reference/payment-types')
  
      def payment_types_edit(self, payment_type):
          """
          :param payment_type: object
          :return: Response
          """
          self.parameters['paymentType'] = json.dumps(payment_type)
  
          return self.post('/reference/payment-types/' + payment_type['code'] + '/edit')
  
      def price_types(self):
          """
          :return: Response
          """
  
          return self.get('/reference/price-types')
  
      def price_types_edit(self, price_type):
          """
          :param price_type: object
          :return: Response
          """
          self.parameters['priceTypes'] = json.dumps(price_type)
  
          return self.post('/reference/price-types/' + price_type['code'] + '/edit')
  
      def product_statuses(self):
          """
          :return: Response
          """
  
          return self.get('/reference/product-statuses')
  
      def product_statuses_edit(self, product_status):
          """
          :param product_status: object
          :return: Response
          """
          self.parameters['productStatus'] = json.dumps(product_status)
  
          return self.post('/reference/product-statuses/' + product_status['code'] + '/edit')
  
      def sites(self):
          """
          :return: Response
          """
  
          return self.get('/reference/sites')
  
      def sites_edit(self, site):
          """
          :param site: object
          :return: Response
          """
          self.parameters['site'] = json.dumps(site)
  
          return self.post('/reference/sites/' + site['code'] + '/edit')
  
      def status_groups(self):
          """
          :return Response
          """
  
          return self.get('/reference/status-groups')
  
      def statuses(self):
          """
          :return: Response
          """
  
          return self.get('/reference/statuses')
  
      def statuses_edit(self, status):
          """
          :param status: object
          :return: Response
          """
          self.parameters['status'] = json.dumps(status)
  
          return self.post('/reference/statuses/' + status['code'] + '/edit')
  
      def stores(self):
          """
          :return: Response
          """
  
          return self.get('/reference/stores')
  
      def stores_edit(self, store):
          """
          :param store: object
          :return: Response
          """
          self.parameters['store'] = json.dumps(store)
  
          return self.post('/reference/stores/' + store['code'] + '/edit')
  
      def units(self):
          """
          :return: Response
          """
  
          return self.get('/reference/units')
  
      def units_edit(self, units):
          """
          :param units: object
          :return: Response
          """
          self.parameters['units'] = json.dumps(units)
  
          return self.post('/reference/units/' + units['code'] + '/edit')
  
      def segments(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/segments')
  
      def inventories(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/store/inventories')
  
      def inventories_upload(self, offers, site=None):
          """
          :param offers: array of objects
          :param site: string
          :return: Response
          """
          if site is not None:
              self.parameters['site'] = site
  
          self.parameters['offers'] = json.dumps(offers)
  
          return self.post('/store/inventories/upload')
  
      def prices_upload(self, prices):
          """
          :param prices: array of objects
          :return: Response
          """
          self.parameters['prices'] = json.dumps(prices)
  
          return self.post('/store/prices/upload')
  
      def product_groups(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/store/product-groups')
  
      def products(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/store/products')
  
      def products_properties(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/store/products/properties')
  
      def tasks(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/tasks')
  
      def task_create(self, task, site=None):
          """
          :param task: object
          :param site: string
          :return: Response
          """
          self.parameters['task'] = json.dumps(task)
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/tasks/create')
  
      def task(self, uid):
          """
          :param uid: string
          :return: Response
          """
  
          return self.get('/tasks/' + str(uid))
  
      def task_edit(self, task, site=None):
          """
          :param task: object
          :param site: string
          :return: Response
          """
          self.parameters['task'] = json.dumps(task)
  
          if site is not None:
              self.parameters['site'] = site
  
          return self.post('/tasks/' + str(task['id']) + '/edit')
  
      def telephony_call_event(self, event):
          """
          :param event: object
          :return: Response
          """
          self.parameters['event'] = json.dumps(event)
  
          return self.post('/telephony/call/event')
  
      def telephony_calls_upload(self, calls):
          """
          :param calls: array of objects
          :return: Response
          """
          self.parameters['calls'] = json.dumps(calls)
  
          return self.post('/telephony/calls/upload')
  
      def telephony_manager(self, phone, details=True, ignore_status=True):
          """
          :param phone: string
          :param details: string
          :param ignore_status: string
          :return: Response
          """
          self.parameters['phone'] = phone
          self.parameters['details'] = details
          self.parameters['ignoreStatus'] = ignore_status
  
          return self.get('/telephony/manager')
  
      def user_groups(self, limit=20, page=1):
          """
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/user-groups')
  
      def users(self, filters=None, limit=20, page=1):
          """
          :param filters: object
          :param limit: integer
          :param page: integer
          :return: Response
          """
          self.parameters['filter'] = filters
          self.parameters['limit'] = limit
          self.parameters['page'] = page
  
          return self.get('/users')
  
      def user(self, uid):
          """
          :param uid: integer
          :return: Response
          """
  
          return self.get('/users/' + str(uid))
  
      def user_status(self, uid, status):
          """
          :param uid: integer
          :param status: string
          :return: Response
          """
  
          self.parameters['status'] = status
  
          return self.post('/users/' + str(uid) + '/status')
  
      def statistic_update(self):
          """
          :return: Response
          """
  
          return self.get('/statistic/update')
  