Пример #1
0
    def get(self):
        p = self.request.get('p')
        q = self.request.get('q')
        c = self.request.get('c')
        forward = True if p not in ['prev'] else False
        cursor = Cursor(urlsafe=c)
        user_key = ndb.Key('User', long(self.user_id))

        if q:
            qry = Bom.query(
                Bom.owners == user_key,
                ndb.OR(Bom.public_id == q, Bom.name == q, Bom.tag_name == q))
        else:
            qry = Bom.query(Bom.owners == user_key)

        PAGE_SIZE = 5
        if forward:
            boms, next_cursor, more = qry.order(Bom.key).fetch_page(
                PAGE_SIZE, start_cursor=cursor)
            if next_cursor and more:
                self.view.next_cursor = next_cursor
            if c:
                self.view.prev_cursor = cursor.reversed()
        else:
            boms, next_cursor, more = qry.order(-Bom.key).fetch_page(
                PAGE_SIZE, start_cursor=cursor)
            boms = list(reversed(boms))
            if next_cursor and more:
                self.view.prev_cursor = next_cursor
            self.view.next_cursor = cursor.reversed()

        def pager_url(p, cursor):
            params = OrderedDict()
            if q:
                params['q'] = q
            if p in ['prev']:
                params['p'] = p
            if cursor:
                params['c'] = cursor.urlsafe()
            return self.uri_for('boms', **params)

        self.view.pager_url = pager_url
        self.view.q = q

        params = {
            "list_columns": [('name', 'BOM Name'), ('public_id', 'Public ID'),
                             ('public', 'public'),
                             ('change_time', 'Last Updated')],
            "boms":
            boms,
            "count":
            qry.count()
        }
        return self.render_template('boms.html', **params)
Пример #2
0
    def get(self):
        p = self.request.get('p')
        q = self.request.get('q')
        c = self.request.get('c')
        forward = True if p not in ['prev'] else False
        cursor = Cursor(urlsafe=c)

        if q:
            qry = Bom.query(ndb.OR(Bom.public_id == q,
                                          Bom.name == q,
                                          Bom.tag_name == q))
        else:
            qry = Bom.query()

        PAGE_SIZE = 5
        if forward:
            boms, next_cursor, more = qry.order(Bom.key).fetch_page(PAGE_SIZE, start_cursor=cursor)
            if next_cursor and more:
                self.view.next_cursor = next_cursor
            if c:
                self.view.prev_cursor = cursor.reversed()
        else:
            boms, next_cursor, more = qry.order(-Bom.key).fetch_page(PAGE_SIZE, start_cursor=cursor)
            boms = list(reversed(boms))
            if next_cursor and more:
                self.view.prev_cursor = next_cursor
            self.view.next_cursor = cursor.reversed()
 
        def pager_url(p, cursor):
            params = OrderedDict()
            if q:
                params['q'] = q
            if p in ['prev']:
                params['p'] = p
            if cursor:
                params['c'] = cursor.urlsafe()
            return self.uri_for('boms-admin', **params)

        self.view.pager_url = pager_url
        self.view.q = q
        
        params = {
            "list_columns": [('public_id', 'Public ID'),
                             ('name', 'BOM Name'), 
                             ('tag_name', 'Tag Name'),
                             ('public', 'public')],
            "boms" : boms,
            "count" : qry.count(),
        }

        # FIXME: admin_user should probably go into BaseHandler
        params['admin_user'] = googleusers.is_current_user_admin()

        return self.render_template('admin/boms.html', **params)
Пример #3
0
    def get(self):
        p = self.request.get('p')
        q = self.request.get('q')
        c = self.request.get('c')
        forward = True if p not in ['prev'] else False
        cursor = Cursor(urlsafe=c)
        user_key = ndb.Key('User', long(self.user_id))

        if q:
            qry = Bom.query(Bom.owners == user_key,
                            ndb.OR(Bom.public_id == q,
                            Bom.name == q,
                            Bom.tag_name == q))
        else:
            qry = Bom.query(Bom.owners == user_key)

        PAGE_SIZE = 5
        if forward:
            boms, next_cursor, more = qry.order(Bom.key).fetch_page(PAGE_SIZE, start_cursor=cursor)
            if next_cursor and more:
                self.view.next_cursor = next_cursor
            if c:
                self.view.prev_cursor = cursor.reversed()
        else:
            boms, next_cursor, more = qry.order(-Bom.key).fetch_page(PAGE_SIZE, start_cursor=cursor)
            boms = list(reversed(boms))
            if next_cursor and more:
                self.view.prev_cursor = next_cursor
            self.view.next_cursor = cursor.reversed()
 
        def pager_url(p, cursor):
            params = OrderedDict()
            if q:
                params['q'] = q
            if p in ['prev']:
                params['p'] = p
            if cursor:
                params['c'] = cursor.urlsafe()
            return self.uri_for('boms', **params)

        self.view.pager_url = pager_url
        self.view.q = q
        
        params = {
            "list_columns": [('name', 'BOM Name'), 
                             ('public_id', 'Public ID'),
                             ('public', 'public'),
                             ('change_time', 'Last Updated')],
            "boms" : boms,
            "count" : qry.count()
        }
        return self.render_template('boms.html', **params)
Пример #4
0
 def get(self):
     bom = Bom.new('newbom')
     bom.name = 'bom-' + bom.public_id
     bom.put(self.user_id, makeowner=True)
     time.sleep(0.6)  # give db some time to write
     self.add_message("New BOM created!", 'success')
     return self.redirect_to('bom-edit', public_id=bom.public_id)
Пример #5
0
 def get(self):
     bom = Bom.new('newbom')
     bom.name = 'bom-' + bom.public_id
     bom.put(self.user_id, makeowner=True)
     time.sleep(0.6)  # give db some time to write
     self.add_message("New BOM created!", 'success')
     return self.redirect_to('bom-edit', public_id=bom.public_id)
Пример #6
0
 def get(self, public_id):
     params = {}
     bom = Bom.query(Bom.public_id == public_id).get()
     if bom:
         parts = Part.query(ancestor=bom.key).order(-Part.create_time).fetch()
         rawparts = []
         for part in parts:
             raw = []
             quantity_units = ''
             if part.quantity_units:
                 quantity_units = ', units='+part.quantity_units
             raw.append(part.name+quantity_units+'   '+part.part_group+'\n')
             for note in part.note_list:
                 raw.append('   * '+note+'\n')
             for designator in part.designator_list:
                 raw.append('   # '+designator+'\n')
             for i in range(len(part.manufacturer_names)):
                 raw.append('   @ '+part.manufacturer_names[i]+
                            '   '+part.manufacturer_partnums[i]+
                            '\n')
             for i in range(len(part.supplier_names)):
                 raw.append('   $ '+part.supplier_names[i]+
                            '   '+part.supplier_ordernums[i])
                 package_count = part.supplier_packagecounts[i]
                 if package_count != 1:
                     if (package_count % 1) == 0:
                         package_count = '%0.0f' % package_count
                     else:
                         package_count = '%0.3f' % package_count
                     raw.append('   '+package_count)
                 raw.append('   '+part.supplier_currencies[i])
                 if part.supplier_countries[i]:
                     raw.append('   '+part.supplier_currencies[i])
                 raw.append(' %0.2f' % part.supplier_prices[i])
                 if part.supplier_urls[i]:
                     raw.append('   '+part.supplier_urls[i])                    
                 raw.append('\n')
             for i in range(len(part.subsystem_names)):
                 quantities = part.subsystem_quantities[i]
                 if (quantities % 1) == 0:
                     quantities = '%0.0f' % quantities
                 else:
                     quantities = '%0.2f' % quantities
                 raw.append('   '+quantities+
                            '   '+part.subsystem_names[i]+
                            '   '+part.subsystem_specificuses[i]+
                            '\n')
             rawparts.append({'id':part.key.id(), 'raw':''.join(raw)[:-1]})
         params = {
             "is_owner" : ndb.Key('User', long(self.user_id or 0)) in bom.owners,
             "public_id": public_id,
             "currency": "USD",
             "bom" : bom,
             "rawparts" : rawparts
         }
         # prime form
         # self.form.process(obj=bom)
         return self.render_template('bom_edit.html', **params)
     else:
         self.abort(404)
Пример #7
0
 def get_or_404(self, bom_id):
     try:
         bom = Bom.get_by_id(long(bom_id))
         if bom:
             return bom
     except ValueError:
         pass
     self.abort(404)
Пример #8
0
 def get(self, bom_id):
     # TODO:
     #   check user
     bom = Bom.get_by_id(long(bom_id))
     if bom:
         bom.delete()
         time.sleep(0.5)  # give db some time to write
         self.add_message('BOM deleted!', 'success')
         self.redirect(self.uri_for('boms'))
     else:
         self.abort(404)
Пример #9
0
 def get(self, bom_id):
     # TODO:
     #   check user
     bom = Bom.get_by_id(long(bom_id))
     if bom:
         bom.delete()
         time.sleep(0.5)  # give db some time to write
         self.add_message('BOM deleted!', 'success')
         self.redirect(self.uri_for('boms'))
     else:
         self.abort(404)
Пример #10
0
 def get(self, public_id):
     params = {}
     bom = Bom.query(Bom.public_id == public_id).get()
     if bom:
         parts = Part.query(ancestor=bom.key).order(Part.name).fetch()
         raw = []
         for part in parts:
             quantity_units = ''
             if part.quantity_units:
                 quantity_units = ', units='+part.quantity_units
             raw.append(part.name+quantity_units+'   '+part.part_group+'\n')
             for note in part.note_list:
                 raw.append('   * '+note+'\n')
             for designator in part.designator_list:
                 raw.append('   # '+designator+'\n')
             for i in range(len(part.manufacturer_names)):
                 raw.append('   @ '+part.manufacturer_names[i]+
                            '   '+part.manufacturer_partnums[i]+
                            '\n')
             for i in range(len(part.supplier_names)):
                 raw.append('   $ '+part.supplier_names[i]+
                            '   '+part.supplier_ordernums[i])
                 package_count = part.supplier_packagecounts[i]
                 if package_count != 1:
                     if (package_count % 1) == 0:
                         package_count = '%0.0f' % package_count
                     else:
                         package_count = '%0.3f' % package_count
                     raw.append('   '+package_count)
                 raw.append('   '+part.supplier_currencies[i])
                 if part.supplier_countries[i]:
                     raw.append('   '+part.supplier_currencies[i])
                 raw.append(' %0.2f' % part.supplier_prices[i])
                 if part.supplier_urls[i]:
                     raw.append('   '+part.supplier_urls[i])                    
                 raw.append('\n')
             for i in range(len(part.subsystem_names)):
                 quantities = part.subsystem_quantities[i]
                 if (quantities % 1) == 0:
                     quantities = '%0.0f' % quantities
                 else:
                     quantities = '%0.2f' % quantities
                 raw.append('   '+quantities+
                            '   '+part.subsystem_names[i]+
                            '   '+part.subsystem_specificuses[i]+
                            '\n')
             raw.append('\n')
         params['raw'] = ''.join(raw)
         return self.render_template('bom_raw.html', **params)
     else:
         self.abort(404)
Пример #11
0
 def get(self, public_id, currency):
     params = {}
     bom = Bom.query(Bom.public_id == public_id).get()
     if bom:
         params = {
             "is_owner" : ndb.Key('User', long(self.user_id or 0)) in bom.owners,
             "public_id": public_id,
             "currency": "USD",
             "bom" : bom,
             "by_supplier" : bom.get_parts_by_supplier(currency)
         }
         return self.render_template('bom_order.html', **params)
     else:
         self.abort(404)
Пример #12
0
 def get(self, public_id):
     params = {}
     bom = Bom.query(Bom.public_id == public_id).get()
     if bom:
         parts = Part.query(ancestor=bom.key).order(Part.name).fetch()
         raw = []
         for part in parts:
             quantity_units = ''
             if part.quantity_units:
                 quantity_units = ', units=' + part.quantity_units
             raw.append(part.name + quantity_units + '   ' +
                        part.part_group + '\n')
             for note in part.note_list:
                 raw.append('   * ' + note + '\n')
             for designator in part.designator_list:
                 raw.append('   # ' + designator + '\n')
             for i in range(len(part.manufacturer_names)):
                 raw.append('   @ ' + part.manufacturer_names[i] + '   ' +
                            part.manufacturer_partnums[i] + '\n')
             for i in range(len(part.supplier_names)):
                 raw.append('   $ ' + part.supplier_names[i] + '   ' +
                            part.supplier_ordernums[i])
                 package_count = part.supplier_packagecounts[i]
                 if package_count != 1:
                     if (package_count % 1) == 0:
                         package_count = '%0.0f' % package_count
                     else:
                         package_count = '%0.3f' % package_count
                     raw.append('   ' + package_count)
                 raw.append('   ' + part.supplier_currencies[i])
                 if part.supplier_countries[i]:
                     raw.append('   ' + part.supplier_currencies[i])
                 raw.append(' %0.2f' % part.supplier_prices[i])
                 if part.supplier_urls[i]:
                     raw.append('   ' + part.supplier_urls[i])
                 raw.append('\n')
             for i in range(len(part.subsystem_names)):
                 quantities = part.subsystem_quantities[i]
                 if (quantities % 1) == 0:
                     quantities = '%0.0f' % quantities
                 else:
                     quantities = '%0.2f' % quantities
                 raw.append('   ' + quantities + '   ' +
                            part.subsystem_names[i] + '   ' +
                            part.subsystem_specificuses[i] + '\n')
             raw.append('\n')
         params['raw'] = ''.join(raw)
         return self.render_template('bom_raw.html', **params)
     else:
         self.abort(404)
Пример #13
0
 def get(self, public_id, currency):
     params = {}
     bom = Bom.query(Bom.public_id == public_id).get()
     if bom:
         params = {
             "is_owner": ndb.Key('User', long(self.user_id or 0))
             in bom.owners,
             "public_id": public_id,
             "currency": "USD",
             "bom": bom,
             "by_supplier": bom.get_parts_by_supplier(currency)
         }
         return self.render_template('bom_order.html', **params)
     else:
         self.abort(404)
Пример #14
0
 def post(self):
     bomfu = self.request.get('bomfu')
     if bomfu:
         self.response.headers.add_header('content-type', 'application/json', 
                                          charset='utf-8')
         bom = Bom.new('newbom')
         bom.name = 'bom-imported-' + bom.public_id
         bom.put(self.user_id, makeowner=True)
         ret = parse_and_add(bomfu, bom.key.id(), self.user_id)
         if ret:  # fail
             bom.key.delete()  # FIXME: refactor parse_and_add
             self.response.out.write(json.dumps({"error":ret})) 
         else:    # ok
             self.response.out.write('{"error":false, "public_id":"'+bom.public_id+'"}')
         # self.redirect(self.uri_for('bom-edit', public_id=bom.public_id))
     else:
         self.abort(501)
Пример #15
0
 def post(self):
     bomfu = self.request.get('bomfu')
     if bomfu:
         self.response.headers.add_header('content-type',
                                          'application/json',
                                          charset='utf-8')
         bom = Bom.new('newbom')
         bom.name = 'bom-imported-' + bom.public_id
         bom.put(self.user_id, makeowner=True)
         ret = parse_and_add(bomfu, bom.key.id(), self.user_id)
         if ret:  # fail
             bom.key.delete()  # FIXME: refactor parse_and_add
             self.response.out.write(json.dumps({"error": ret}))
         else:  # ok
             self.response.out.write('{"error":false, "public_id":"' +
                                     bom.public_id + '"}')
         # self.redirect(self.uri_for('bom-edit', public_id=bom.public_id))
     else:
         self.abort(501)
Пример #16
0
 def post(self, bom_id):
     name = self.request.get('name')
     public = self.request.get('public')
     bom = Bom.get_by_id(long(bom_id))
     if bom:
         self.response.headers.add_header('content-type', 'application/json', 
                                          charset='utf-8')
         ret = 'false'
         if name:
             bom.name = name
         if public:
             if public == 'true':
                 bom.public = True
             elif public == 'false':
                 bom.public = False
         if name or public:
             try:
                 bom.put(self.user_id)
             except AuthWriterError as ex:
                 ret = str(ex)
         self.response.out.write('{"error":'+ret+'}')
     else:
         self.abort(404)
Пример #17
0
 def post(self, bom_id):
     name = self.request.get('name')
     public = self.request.get('public')
     bom = Bom.get_by_id(long(bom_id))
     if bom:
         self.response.headers.add_header('content-type',
                                          'application/json',
                                          charset='utf-8')
         ret = 'false'
         if name:
             bom.name = name
         if public:
             if public == 'true':
                 bom.public = True
             elif public == 'false':
                 bom.public = False
         if name or public:
             try:
                 bom.put(self.user_id)
             except AuthWriterError as ex:
                 ret = str(ex)
         self.response.out.write('{"error":' + ret + '}')
     else:
         self.abort(404)
Пример #18
0
 def get(self, public_id):
     params = {}
     bom = Bom.query(Bom.public_id == public_id).get()
     if bom:
         parts = Part.query(
             ancestor=bom.key).order(-Part.create_time).fetch()
         rawparts = []
         for part in parts:
             raw = []
             quantity_units = ''
             if part.quantity_units:
                 quantity_units = ', units=' + part.quantity_units
             raw.append(part.name + quantity_units + '   ' +
                        part.part_group + '\n')
             for note in part.note_list:
                 raw.append('   * ' + note + '\n')
             for designator in part.designator_list:
                 raw.append('   # ' + designator + '\n')
             for i in range(len(part.manufacturer_names)):
                 raw.append('   @ ' + part.manufacturer_names[i] + '   ' +
                            part.manufacturer_partnums[i] + '\n')
             for i in range(len(part.supplier_names)):
                 raw.append('   $ ' + part.supplier_names[i] + '   ' +
                            part.supplier_ordernums[i])
                 package_count = part.supplier_packagecounts[i]
                 if package_count != 1:
                     if (package_count % 1) == 0:
                         package_count = '%0.0f' % package_count
                     else:
                         package_count = '%0.3f' % package_count
                     raw.append('   ' + package_count)
                 raw.append('   ' + part.supplier_currencies[i])
                 if part.supplier_countries[i]:
                     raw.append('   ' + part.supplier_currencies[i])
                 raw.append(' %0.2f' % part.supplier_prices[i])
                 if part.supplier_urls[i]:
                     raw.append('   ' + part.supplier_urls[i])
                 raw.append('\n')
             for i in range(len(part.subsystem_names)):
                 quantities = part.subsystem_quantities[i]
                 if (quantities % 1) == 0:
                     quantities = '%0.0f' % quantities
                 else:
                     quantities = '%0.2f' % quantities
                 raw.append('   ' + quantities + '   ' +
                            part.subsystem_names[i] + '   ' +
                            part.subsystem_specificuses[i] + '\n')
             rawparts.append({
                 'id': part.key.id(),
                 'raw': ''.join(raw)[:-1]
             })
         params = {
             "is_owner": ndb.Key('User', long(self.user_id or 0))
             in bom.owners,
             "public_id": public_id,
             "currency": "USD",
             "bom": bom,
             "rawparts": rawparts
         }
         # prime form
         # self.form.process(obj=bom)
         return self.render_template('bom_edit.html', **params)
     else:
         self.abort(404)
Пример #19
0
    def get(self):
        """Add new test BOM from file.

        Parsed BOM format:
        [
          [ part_name, quantity_units, part_group,
            [ note,
              ...
            ],
            [ designator,
              ...
            ],
            [ [manufacturer, part_num],
              ...
            ],
            [ [supplier_name, order_num, package_count, currency, country, amount, explicit_url], 
              [another supplier],
                ...
            ],
            [ [quantity, subsystem, specific use],
              [another usage],
                ...
            ]
          ],
          [ another part ],
            ...
        ]
        """
        from web.bomfu_parser_legacy import get_new_from_legacy
        from web.bomfu_parser import parse

        bom_file = get_new_from_legacy()
        bom_parsed = parse(bom_file)

        bom = Bom.new('')
        bom.name = "test-" + str(bom.public_id)
        bom._put()  # put without setting user

        for p in bom_parsed:
            part = bom.new_part(p[0])
            part.quantity_units = p[1]
            part.part_group = p[2]
            part.note_list = p[3]
            part.designator_list = p[4]
            for manufacturer in p[5]:
                part.manufacturer_names.append(manufacturer[0])
                part.manufacturer_partnums.append(manufacturer[1])
            for supplier in p[6]:
                part.supplier_names.append(supplier[0])
                part.supplier_ordernums.append(supplier[1])
                part.supplier_packagecounts.append(supplier[2])
                part.supplier_currencies.append(supplier[3])
                part.supplier_countries.append(supplier[4])
                part.supplier_prices.append(supplier[5])
                part.supplier_urls.append(supplier[6])
            for usage in p[7]:
                part.subsystem_quantities.append(usage[0])
                part.subsystem_names.append(usage[1])
                part.subsystem_specificuses.append(usage[2])
            part._put()

        self.redirect(self.uri_for('bom-raw', public_id=bom.public_id))
Пример #20
0
    def get(self):
        """Add new test BOM from file.

        Parsed BOM format:
        [
          [ part_name, quantity_units, part_group,
            [ note,
              ...
            ],
            [ designator,
              ...
            ],
            [ [manufacturer, part_num],
              ...
            ],
            [ [supplier_name, order_num, package_count, currency, country, amount, explicit_url], 
              [another supplier],
                ...
            ],
            [ [quantity, subsystem, specific use],
              [another usage],
                ...
            ]
          ],
          [ another part ],
            ...
        ]
        """
        try:
            from web.bomfu_parser import parse
            bom_parsed = parse(example_simple)
            # bom_parsed = parse(example)
        except bomfu_parser.ParseError as ex:
            self.add_message("%s" % ex, 'error')

        try:
            bom = Bom.new('')
            bom.name = "lasersaur-" + str(bom.public_id)
            bom.put(self.user_id, makeowner=True)

            for p in bom_parsed:
                part = bom.new_part(p[0])
                part.quantity_units = p[1]
                part.part_group = p[2]
                part.note_list = p[3]
                part.designator_list = p[4]
                for manufacturer in p[5]:
                    part.manufacturer_names.append(manufacturer[0])
                    part.manufacturer_partnums.append(manufacturer[1])
                for supplier in p[6]:
                    part.supplier_names.append(supplier[0])
                    part.supplier_ordernums.append(supplier[1])
                    part.supplier_packagecounts.append(supplier[2])
                    part.supplier_currencies.append(supplier[3])
                    part.supplier_countries.append(supplier[4])
                    part.supplier_prices.append(supplier[5])
                    part.supplier_urls.append(supplier[6])
                for usage in p[7]:
                    part.subsystem_quantities.append(usage[0])
                    part.subsystem_names.append(usage[1])
                    part.subsystem_specificuses.append(usage[2])
                part.put(self.user_id)
        except AuthWriterError as ex:
            self.add_message("%s" % ex, 'error')

        self.redirect(self.uri_for('bom-edit', public_id=bom.public_id))