예제 #1
0
파일: main.py 프로젝트: steventhan/my-hng
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'))
예제 #2
0
파일: main.py 프로젝트: steventhan/my-hng
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'))
예제 #3
0
파일: setlist.py 프로젝트: Mgiepz/bricklink
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)
예제 #4
0
파일: forms.py 프로젝트: ZAM-/trackr
    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
예제 #5
0
파일: app.py 프로젝트: brich33713/ifixedit
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
예제 #6
0
    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))
예제 #7
0
파일: utils.py 프로젝트: lpj0017/b-tv
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()
예제 #8
0
파일: forms.py 프로젝트: ZAM-/trackr
 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()
예제 #9
0
파일: forms.py 프로젝트: ZAM-/trackr
 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()
예제 #10
0
파일: db.py 프로젝트: Mgiepz/bricklink
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
예제 #11
0
파일: views.py 프로젝트: daubers/MakeBook
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
예제 #12
0
파일: main.py 프로젝트: steventhan/my-hng
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'))
예제 #13
0
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'))
예제 #14
0
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
예제 #15
0
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'))
예제 #16
0
    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
예제 #17
0
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'))
예제 #18
0
    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
예제 #19
0
파일: seed.py 프로젝트: brich33713/ifixedit
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()
예제 #20
0
    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.")
예제 #21
0
 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)])
예제 #22
0
        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)
예제 #23
0
    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