def create_model(self, store): tax_constant = SellableTaxConstant.get_by_type(TaxType.SERVICE, self.store) sellable = Sellable(description=u'', price=currency(0), store=store) sellable.status = Sellable.STATUS_AVAILABLE sellable.tax_constant = tax_constant sellable.unit = sysparam(self.store).SUGGESTED_UNIT model = Service(sellable=sellable, store=store) return model
def post(self, store): data = self.get_json() if 'product' not in data: abort(400, 'There is no product data on payload') sellable_id = data.get('sellable_id') barcode = data.get('barcode') description = data.get('description') base_price = self._price_validation(data) if sellable_id and store.get(Sellable, sellable_id): abort(400, 'Product with this id already exists') if barcode and store.find(Sellable, barcode=barcode): abort(400, 'Product with this barcode already exists') sellable = Sellable(store=store) if sellable_id: sellable.id = sellable_id sellable.code = barcode sellable.barcode = barcode sellable.description = description # FIXME The sellable is created with STATUS_CLOSED because we need the taxes info # to start selling so this is just a temporary sellable just to save it on the # database so the override can be created sellable.status = Sellable.STATUS_CLOSED sellable.base_price = base_price product_data = data.get('product') product = Product(store=store, sellable=sellable) product.manage_stock = product_data.get('manage_stock', False) return make_response( jsonify({ 'message': 'Product created', 'data': { 'id': sellable.id, 'barcode': sellable.barcode, 'description': sellable.description, 'status': sellable.status, } }), 201)
def post(self, store): data = self.get_json() log.debug("POST /sellable station: %s payload: %s", self.get_current_station(store), data) if 'product' not in data: abort(400, 'There is no product data on payload') sellable_id = data.get('sellable_id') barcode = data.get('barcode') description = data.get('description') base_price = self._price_validation(data) sellable = store.get(Sellable, sellable_id) sellable_created_via_sale = sellable and Sellable.NOTES_CREATED_VIA_SALE in sellable.notes if sellable and not sellable_created_via_sale: message = 'Product with id {} already exists'.format(sellable_id) log.warning(message) return make_response(jsonify({ 'message': message, }), 200) if barcode and store.find(Sellable, barcode=barcode): message = 'Product with barcode {} already exists'.format(barcode) log.warning(message) return make_response(jsonify({ 'message': message, }), 200) if not sellable: sellable = Sellable(store=store) if sellable_id: sellable.id = sellable_id sellable.code = barcode sellable.barcode = barcode sellable.description = description # FIXME The sellable is created with STATUS_CLOSED because we need the taxes info # to start selling so this is just a temporary sellable just to save it on the # database so the override can be created sellable.status = Sellable.STATUS_CLOSED sellable.base_price = base_price # If the sellable was pre-created on a sale it has a notes informing it and to # proceed this note is removed sellable.notes = sellable.notes.replace( Sellable.NOTES_CREATED_VIA_SALE, "") product = sellable.product if sellable_created_via_sale else (Product( store=store, sellable=sellable)) product_data = data.get('product') product.manage_stock = product_data.get('manage_stock', False) # For clients that will control their inventory, we have to create a Storable if product.manage_stock and not store.get(Storable, product.id): storable = Storable(store=store, product=product) storable.maximum_quantity = 1000 return make_response( jsonify({ 'message': 'Product created', 'data': { 'id': sellable.id, 'barcode': sellable.barcode, 'description': sellable.description, 'status': sellable.status, } }), 201)