def new_invoice_excel(): excel_file = request.get_dict(field_name='invoice_file') samsung_keys = ( 'Shipped Parts', 'Qty', 'Amount', 'Delivery No', 'P/O No', 'Description', 'Tracking No', ) # Check for valid Samsung invoice format if all(k in excel_file for k in samsung_keys): invoice_number = excel_file['Delivery No'][0] if Invoice.query.get(invoice_number): flash('This invoice already exists', 'alert-danger') return redirect(url_for('invoices')) invoice = Invoice(invoice_number=invoice_number) for idx, part_number in enumerate(excel_file['Shipped Parts']): qty = int(excel_file['Qty'][idx]) purchase_order_number = excel_file['P/O No'][idx] description = excel_file['Description'][idx].strip() price = float(excel_file['Amount'][idx]) / qty part = Part.get_or_create(part_number, db.session) part.description = description part.price = price for _ in range(qty): invoice_detail = InvoiceDetail( invoice_number=invoice_number, purchase_order_number=purchase_order_number, ) invoice_detail.part = part invoice.parts.append(invoice_detail) db.session.add(invoice) db.session.commit() flash('Imported excel file successfully', 'alert-success') else: flash('Invalid file, try again', 'alert-danger') return redirect(url_for('invoices'))
def new_invoice_post(): invoice_number = request.form['invoice_number'] received_date = us_to_sql_date(request.form['date_received']), part_numbers = filter(None, request.form.getlist('part_numbers[]')) part_numbers = [x.upper() for x in part_numbers] assoc_pos = request.form.getlist('assoc_pos[]') shelf_locations = request.form.getlist('shelf_locations[]') if Invoice.query.get(invoice_number): flash("The invoice number has already existed", 'alert-danger') return redirect(url_for('new_invoice')) invoice = Invoice( invoice_number=invoice_number, received_date=received_date ) for idx, x in enumerate(part_numbers): invoice_detail = InvoiceDetail( purchase_order_number=assoc_pos[idx], shelf_location=shelf_locations[idx], ) part = Part.get_or_create(x, db.session) invoice_detail.part = part invoice.parts.append(invoice_detail) db.session.add(invoice) db.session.commit() flash('Invoice created successfully', 'alert-success') return redirect(url_for('invoices'))
def get_set_parts(set_id): params = {'key': API_KEY, 'format': 'json', 'set': set_id} response = requests.get(PARTS_URL, params) data = json.loads(response.text)[0] parts = [] for p in data['parts']: parts.append(Part(p['part_id'], p['element_id'], p['qty'])) return Set(data['set_id'], data['descr'], parts)
def process(self): # Getting ALL existing types all_types = PartType.objects.values('name','number') #LOD for item in range(0, self.total_form_count()): form = self.forms[item] bar_code = form.cleaned_data['bar_code'] status = form.cleaned_data['status'] serial_number = None ptype = None print 1 for types in all_types: if types['number'] in bar_code: ptype = types['name'] serial_number = bar_code.replace(types['number'],'') # Empty part entry partobj = Part() partobj.bar_code = bar_code partobj.status = status # Looking up type based on name, b/c I Needed to use a PartType object partobj.type = PartType.objects.get(name=ptype) partobj.serial_number = serial_number partobj.save() print 2 return partobj return True else: pass else: return False print 3
def add_part_by_form(): data = request.json part = Part(name=data["name"].capitalize(), link=data["link"], image_url=data["image_url"], price=data["price"]) db.session.add(part) db.session.commit() return data
async def post(self, request): data = await request.post() part = Part(name=data.get('name'), country=data.get('country'), model=data.get('model')) session.add(part) session.commit() return await self.response_200(response_data=session.query(Part))
def save_part(data_dict, video,file_path): part_list = Part.objects.filter(cid=data_dict['cid']) f = open(file_path) if part_list.count() == 0: part = Part(cid=data_dict['cid']) part.name = data_dict['partname'] if part.name == '': part.name = data_dict['title'] part.desc = data_dict['description'] part.video = video part.mp4.save('%s.mp4' % part.name, File(f)) part.save() else: part = part_list[0] if not part.mp4: part.mp4.save('%s.mp4' % part.name, File(f)) part.save() f.close()
def process(self): # This method will parse the list of bar_codes and create and save # a new part object for each bar_code. for line in self.cleaned_data['file']: # Very poor way to do things, but it will work for now :) partobj=Part() # Creating model obj # Setting model attributes automatically partobj.bar_code = line partobj.type = self.cleaned_data['type'] partobj.status = self.cleaned_data['status'] partobj.serial_number = line[10:] partobj.save()
def post_process(self,valid_bc_list): #Func to create and save Part() objects all_types = PartType.objects.values('name','number') for item in valid_bc_list: partobj = Part() for types in all_types: if types['number'] in item: ptype=types['name'] serial_number = item.replace(types['number'],'') # breaking up bar_code into PN + SN partobj.bar_code = item partobj.status = self.cleaned_data['status'] partobj.type = PartType.objects.get(number=types['number']) partobj.serial_number = serial_number partobj.save()
def load_parts(xml_file): tree = ET.parse(xml_file) root = tree.getroot() parts = [] for item in root.findall('ITEM'): try: part_id = item.find('ITEMID').text color_id = item.find('COLOR').text qty = int(item.find('MINQTY').text) except: raise XmlFormatError(item) if part_id is None or color_id is None or qty is None: raise XmlFormatError(item) part = Part(part_id, color_id, qty) print('loading part', part) parts.append(part) return parts
def new_part(request): """ Ajax method to create a new part returns the new parts id on success and false on failure """ returndict = {} if request.method == 'POST': try: partdict = json.loads(request.POST['newpart']) newpart = Part() newpart.number = partdict['number'] newpart.name = partdict['name'] newpart.source = partdict['source'] newpart.description = partdict['description'] newpart.cost = float(partdict['cost']) newpart.save() returndict['id'] = newpart.id except Exception, e: returndict['error'] = e.message
def update_invoice(invoice_number): invoice = Invoice.query.get(invoice_number) if not invoice: flash('The invoice number does not exist', 'alert-danger') return redirect(url_for('invoices')) received_date = us_to_sql_date(request.form['date_received']) invoice_detail_id = request.form.getlist('invoice_detail_id[]') part_numbers = filter(None, request.form.getlist('part_numbers[]')) part_numbers = [x.upper() for x in part_numbers] assoc_pos = request.form.getlist('assoc_pos[]') shelf_locations = request.form.getlist('locations[]') statuses = request.form.getlist('statuses[]') invoice.received_date = received_date for idx, x in enumerate(part_numbers): invoice_detail = InvoiceDetail.query.get(invoice_detail_id[idx]) part = Part.get_or_create(x, db.session) if not invoice_detail: invoice_detail = InvoiceDetail( purchase_order_number=assoc_pos[idx], shelf_location=shelf_locations[idx], ) invoice_detail.part = part invoice_detail.purchase_order_number = assoc_pos[idx] invoice_detail.status = statuses[idx] invoice_detail.shelf_location = shelf_locations[idx] invoice.parts.append(invoice_detail) else: if statuses[idx] == 'Remove': db.session.delete(invoice_detail) else: if (statuses[idx] in ('In Stock - Claimed', 'Used - Claimed') and statuses[idx] != invoice_detail.status): invoice_detail.claimed = True invoice_detail.claimed_date = datetime.date.today() elif statuses[idx] == 'New': invoice_detail.claimed = False invoice_detail.claimed_date = None invoice_detail.part = part invoice_detail.purchase_order_number = assoc_pos[idx] invoice_detail.status = statuses[idx] invoice_detail.shelf_location = shelf_locations[idx] db.session.commit() flash('Change(s) saved', 'alert-success') return redirect(url_for('invoices'))
def get_listings(xml_file, exclude): listings = [] parts_in_file = load_parts(xml_file) parts = [] for part in parts_in_file: should_exclude = False for e in exclude: if Part.from_string(e) == part: should_exclude = True if should_exclude: continue parts.append(part) for part in parts: listings.extend(get_part_listings(part)) store_ids = set() for listing in listings: store_ids.add(listing.store_id) stores = [] for store_id in store_ids: stores.append(Store(store_id)) return parts, stores, listings
def get_form(cls, localizer, default_css=None, **kwargs): role_values = [('individual_author',localizer.translate(_('Individual author'))), ('corporate_author',localizer.translate(_('Corporate author'))), ('translator',localizer.translate(_('Translator'))), ('editor',localizer.translate(_('Editor')))] base_schema = Part.get_schema() base_schema['creators'].children[0]['role'].widget = deform.widget.SelectWidget(values=role_values) base_schema['creators'].children[0]['role'].title = localizer.translate(_('Role')) base_schema['creators'].children[0]['full_name'].title = localizer.translate(_('Full name')) base_schema['creators'].children[0]['link_resume'].title = localizer.translate(_('Resume link')) base_schema['creators'].children[0]['link_resume'].validator = url_validate_factory(message=localizer.translate(_('Invalid URL'))) base_schema['title'].title = localizer.translate(_('Title')) base_schema['title'].description = localizer.translate(_('Title')) base_schema['order'].title = localizer.translate(_('Order')) base_schema['order'].description = localizer.translate(_('Sequential chapter order')) base_schema['creators'].title = localizer.translate(_('Authors')) base_schema['creators'].description = localizer.translate(_('Authors, translators, editors...')) base_schema['pages'].title = localizer.translate(_('Page range')) base_schema['pages']['initial'].title = localizer.translate(_('First page')) base_schema['pages']['initial'].description = localizer.translate(_('First page')) base_schema['pages']['final'].title = localizer.translate(_('Last page')) base_schema['pages']['final'].description = localizer.translate(_('Last page')) base_schema['pdf_file'].title = localizer.translate(_('Book in PDF')) base_schema['pdf_file'].description = localizer.translate(_('Full book PDF')) base_schema['descriptive_information'].title = localizer.translate(_('Descriptive Information')) base_schema['descriptive_information'].description = localizer.translate(_('Descriptive Information')) base_schema['text_language'].title = localizer.translate(_('Text Language')) base_schema['text_language'].description = localizer.translate(_('Text Language')) btn_submit = deform.form.Button(name='btn_submit', title=localizer.translate(_('Submit')), type='submit', value='submit', disabled=False) form = deform.Form(base_schema, buttons=(btn_submit,)) #functions.customize_form_css_class(form, default_css, **kwargs) return form
def new_invoice_post(): invoice_number = request.form['invoice_number'] received_date = us_to_sql_date(request.form['date_received']), part_numbers = filter(None, request.form.getlist('part_numbers[]')) part_numbers = [x.upper() for x in part_numbers] assoc_pos = request.form.getlist('assoc_pos[]') shelf_locations = request.form.getlist('shelf_locations[]') if Invoice.query.get(invoice_number): flash("The invoice number has already existed", 'alert-danger') return redirect(url_for('new_invoice')) invoice = Invoice(invoice_number=invoice_number, received_date=received_date) for idx, x in enumerate(part_numbers): invoice_detail = InvoiceDetail( purchase_order_number=assoc_pos[idx], shelf_location=shelf_locations[idx], ) part = Part.get_or_create(x, db.session) invoice_detail.part = part invoice.parts.append(invoice_detail) db.session.add(invoice) db.session.commit() flash('Invoice created successfully', 'alert-success') return redirect(url_for('invoices'))
def get_form(cls, localizer, default_css=None, **kwargs): role_values = [('individual_author',localizer.translate(_('Individual author'))), ('corporate_author',localizer.translate(_('Corporate author'))), ('translator',localizer.translate(_('Translator'))), ('coordinator',localizer.translate(_('Coordinator'))), ('editor',localizer.translate(_('Editor'))), ('other',localizer.translate(_('Other'))), ('organizer',localizer.translate(_('Organizer'))), ('collaborator',localizer.translate(_('Collaborator'))),] language_values = [('pt', localizer.translate(_('Portuguese'))), ('en', localizer.translate(_('English')))] base_schema = Part.get_schema() base_schema['notes'].widget = deform.widget.TextAreaWidget(cols=80, rows=15) base_schema['creators'].children[0]['role'].widget = deform.widget.SelectWidget(values=role_values) base_schema['creators'].children[0]['role'].title = localizer.translate(_('Role')) base_schema['creators'].children[0]['full_name'].title = localizer.translate(_('Full name')) base_schema['creators'].children[0]['full_name'].widget = deform.widget.TextInputWidget() base_schema['creators'].children[0]['full_name'].widget.css_class = 'fullSizeInput' base_schema['creators'].children[0]['link_resume'].title = localizer.translate(_('Resume link')) base_schema['creators'].children[0]['link_resume'].widget = deform.widget.TextInputWidget() base_schema['creators'].children[0]['link_resume'].widget.css_class = 'fullSizeInput' base_schema['creators'].children[0]['link_resume'].validator = url_validate_factory(message=localizer.translate(_('Invalid URL'))) base_schema['creators'].children[0]['link_resume'].missing = None base_schema['translated_titles'].title = localizer.translate(_('Translated Titles')) base_schema['translated_titles'].description = localizer.translate(_('Translated Titles')) base_schema['translated_titles'].children[0]['title'].title = localizer.translate(_('Title')) base_schema['translated_titles'].children[0]['title'].widget = deform.widget.TextInputWidget() base_schema['translated_titles'].children[0]['title'].widget.css_class = 'fullSizeInput' base_schema['translated_titles'].children[0]['language'].title = localizer.translate(_('Language')) base_schema['translated_titles'].children[0]['language'].widget = deform.widget.SelectWidget(values=language_values) base_schema['title'].title = localizer.translate(_('Title')) base_schema['title'].description = localizer.translate(_('Title')) base_schema['order'].title = localizer.translate(_('Order')) base_schema['order'].description = localizer.translate(_('Sequential chapter order')) base_schema['creators'].title = localizer.translate(_('Authors')) base_schema['creators'].description = localizer.translate(_('Authors, translators, editors...')) base_schema['pages'].title = localizer.translate(_('Page range')) base_schema['pages']['initial'].title = localizer.translate(_('First page')) base_schema['pages']['initial'].description = localizer.translate(_('First page')) base_schema['pages']['final'].title = localizer.translate(_('Last page')) base_schema['pages']['final'].description = localizer.translate(_('Last page')) base_schema['pdf_file'].title = localizer.translate(_('Book in PDF')) base_schema['pdf_file'].description = localizer.translate(_('Full book PDF')) base_schema['descriptive_information'].title = localizer.translate(_('Descriptive Information')) base_schema['descriptive_information'].description = localizer.translate(_('Descriptive Information')) base_schema['text_language'].widget = deform.widget.SelectWidget(values=language_values) base_schema['text_language'].title = localizer.translate(_('Text language')) base_schema['text_language'].description = localizer.translate(_('Text language')) base_schema['notes'].title = localizer.translate(_('Notes')) base_schema['notes'].description = localizer.translate(_('Notes')) btn_cancel = deform.form.Button(name='btn_cancel', title=localizer.translate(_('Cancel')), type='submit', value='cancel', disabled=False) btn_submit = deform.form.Button(name='btn_submit', title=localizer.translate(_('Submit')), type='submit', value='submit', disabled=False) form = deform.Form(base_schema, buttons=(btn_cancel, btn_submit)) functions.customize_form_css_class(form, **cls.widget_classes) return form
db.session.add_all([category, category1, category2, category3, category4]) db.session.commit() subcategory = Subcategory(category_id=category.id, name="Toilets") subcategory1 = Subcategory(category_id=category1.id, name="Engines") trade = Trade(category_id=category.id, name="Plumber", cost_per_hour=12) trade1 = Trade(category_id=category1.id, name="Mechanic", cost_per_hour=24) trade2 = Trade(category_id=category2.id, name="Appliance Expert", cost_per_hour=10) trade3 = Trade(category_id=category3.id, name="Electrician", cost_per_hour=10) trade4 = Trade(category_id=category4.id, name="Carpenter", cost_per_hour=10) part = Part( name="Hammer", link= "https://www.walmart.com/ip/Hyper-Tough-16-Ounce-Claw-Hammer-with-Fiberglass-Handle/972830002", image_url= "https://i5.walmartimages.com/asr/61b5ab99-2d90-45fe-9952-0932abf84c05_1.e755cf112171a90e30833bd8429a2bad.jpeg?odnWidth=100&odnHeight=100&odnBg=ffffff", price=14) part1 = Part( name="Wrench", link= "https://www.walmart.com/ip/8-inch-Adjustable-Wrench-with-Sure-Grip-Handle-UW00015A/17190620", image_url= "https://i5.walmartimages.com/asr/959de1ff-d6a9-4876-9256-2b01e2756462_2.9cdc010d9e8ddfc3c1ca7e7a72f7fcb7.jpeg?odnWidth=100&odnHeight=100&odnBg=ffffff", price=4) db.session.add_all([ subcategory, subcategory1, trade, trade1, trade2, trade3, trade4, part, part1 ]) db.session.commit()
def upload_book(self): file_path = expand_file_path(self.args.upload_data) if not os.path.exists(file_path): exit_with_error("input file path {} does not exist".format(file_path)) with open(file_path, "rb") as schema: try: book_data = json.load(schema) except Exception as e: exit_with_error("Failed loading json schema with error: {}".format(e)) def get_or_none(obj, field): if field in obj: return obj[field] return None file_prefix = os.path.dirname(file_path) def adjust_search_path(path): if path is None: return None return os.path.join(file_prefix, path) # Collect the necessary Diderot objects. course = Course(self.api_client.client, self.args.course) book_label = get_or_none(book_data, "book") # Try out "label", more consistent with Diderot terminology if book_label is None: book_label = get_or_none(book_data, "label") # If book label is still None, then error out. if book_label is None: exit_with_error("Please specify a valid book to upload into") book = Book(course, book_label) # If the upload contains parts, create them. parts = get_or_none(book_data, "parts") if parts is not None: for part in parts: if not Part.exists(course, book, get_or_none(part, "number")): self.api_client.create_part( course.label, book.label, get_or_none(part, "number"), get_or_none(part, "title"), get_or_none(part, "label"), ) # Upload and maybe create the chapters in the input. chapters = get_or_none(book_data, "chapters") if chapters is None: exit_with_error("invalid JSON: could not find field 'chapters'") for chapter in chapters: # Extract data from chapter json number = get_or_none(chapter, "number") label = get_or_none(chapter, "label") title = get_or_none(chapter, "title") attachments = get_or_none(chapter, "attachments") self.args.pdf = adjust_search_path(get_or_none(chapter, "pdf")) self.args.slides = adjust_search_path(get_or_none(chapter, "slides")) self.args.video_url = adjust_search_path(get_or_none(chapter, "video")) self.args.xml = adjust_search_path(get_or_none(chapter, "xml")) self.args.xml_pdf = adjust_search_path(get_or_none(chapter, "xml_pdf")) if number is None: exit_with_error(f"invalid JSON: must provide field 'number' for chapter {chapter}") # If the target chapter does not exist, then create it. if not Chapter.exists(course, book, number): part_num = get_or_none(chapter, "part") # Non-booklets need parts for their chapters. if not book.is_booklet and part_num is None: exit_with_error("Chapter creation in a book requires 'part' field for chapters") self.api_client.create_chapter(course.label, book.label, part_num, number, title, label) print(f"Successfully created chapter number ({number}), label ({label}, title ({title}).") # Upload the target files to the chapter now. self.args.attach = None if attachments is not None: self.args.attach = [adjust_search_path(path) for path in attachments] # Set default arguments that we wont use, but upload_chapter expects. print(f"Uploading chapter number: {number}...") try: self.api_client.upload_chapter( course.label, book.label, number, None, self.args, sleep_time=self.sleep_time, ) except APIError as e: exit_with_error("Failure uploading chapter. Aborting") print("Successfully uploaded chapter.")
def list_parts(self): course = Course(self.api_client.client, self.args.course) book = Book(course, self.args.book) print_list(["{}. {}".format(c["rank"], c["title"]) for c in Part.list(course, book)])
print('Objective value =', solver.Objective().Value()) else: print('The problem does not have an optimal solution.') return optimal_listings def to_var_index(parts, listings, part_index, listing_index): return len(listings) * part_index + listing_index def to_listing_index(parts, listings, var_index): return math.floor(var_index / len(parts)) def to_part_index(parts, listings, var_index): return var_index % len(parts) if __name__ == '__main__': parts = [ Part(3010, 1, 10), Part(3011, 1, 6), ] listings = [ Listing(3010, 1, 10, 0.1, '', '', 's1', 301000), Listing(3011, 1, 10, 0.1, '', '', 's2', 301100) ] stores = [Store('s1'), Store('s2')] optimize(parts, listings, stores)