Changeset 17810d9 in tailbone


Ignore:
Timestamp:
07/26/2022 04:30:04 PM (6 months ago)
Author:
Lance Edgar <lance@…>
Branches:
master
Children:
3726a26
Parents:
92a5213
Message:

Misc. improvements for desktop receiving views

  • don't expose "cases" if config says not to
  • don't expose "expired" if config says not to
  • use numeric-input for quantity fields
  • add product_key_field to global-ish template context
Location:
tailbone
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • tailbone/static/js/tailbone.buefy.numericinput.js

    r92a5213 r17810d9  
    2121    props: {
    2222        name: String,
    23         value: String,
     23        value: [Number, String],
    2424        placeholder: String,
    2525        iconPack: String,
     
    5454        },
    5555
     56        select() {
     57            this.$el.children[0].select()
     58        },
     59
    5660        valueChanged(value) {
    5761            this.$emit('input', value)
  • tailbone/templates/receiving/view_row.mako

    r92a5213 r17810d9  
    8383              <div>
    8484                % if row.product:
    85                     ${form.render_field_readonly('upc')}
     85                    ${form.render_field_readonly(product_key_field)}
    8686                    ${form.render_field_readonly('product')}
    8787                % else:
    8888                    ${form.render_field_readonly('item_entry')}
    89                     ${form.render_field_readonly('upc')}
     89                    ${form.render_field_readonly(product_key_field)}
    9090                    ${form.render_field_readonly('brand_name')}
    9191                    ${form.render_field_readonly('description')}
     
    193193            <b-field grouped>
    194194
    195               <b-field label="Case Qty.">
    196                 <span class="control">
    197                   {{ rowData.case_quantity }}
    198                 </span>
    199               </b-field>
    200 
    201               <span class="control">
    202                 &nbsp;
    203               </span>
     195              % if allow_cases:
     196                  <b-field label="Case Qty.">
     197                    <span class="control">
     198                      {{ rowData.case_quantity }}
     199                    </span>
     200                  </b-field>
     201
     202                  <span class="control">
     203                    &nbsp;
     204                  </span>
     205              % endif
    204206
    205207              <b-field label="Product State"
     
    227229
    228230                <div class="level-item">
    229                   <b-input v-model="accountForProductQuantity"
    230                            type="number" step="0.0001"
    231                            ref="accountForProductQuantityInput">
    232                   </b-input>
     231                  <numeric-input v-model="accountForProductQuantity"
     232                                 ref="accountForProductQuantityInput">
     233                  </numeric-input>
    233234                </div>
    234235
    235236                <div class="level-item">
    236                   <b-field>
    237                     <b-radio-button v-model="accountForProductUOM"
    238                                     @click.native="accountForProductUOMClicked('units')"
    239                                     native-value="units">
    240                       Units
    241                     </b-radio-button>
    242                     <b-radio-button v-model="accountForProductUOM"
    243                                     @click.native="accountForProductUOMClicked('cases')"
    244                                     native-value="cases">
    245                       Cases
    246                     </b-radio-button>
    247                   </b-field>
     237                  % if allow_cases:
     238                      <b-field>
     239                        <b-radio-button v-model="accountForProductUOM"
     240                                        @click.native="accountForProductUOMClicked('units')"
     241                                        native-value="units">
     242                          Units
     243                        </b-radio-button>
     244                        <b-radio-button v-model="accountForProductUOM"
     245                                        @click.native="accountForProductUOMClicked('cases')"
     246                                        native-value="cases">
     247                          Cases
     248                        </b-radio-button>
     249                      </b-field>
     250                  % else:
     251                      <b-field>
     252                        <input type="hidden" v-model="accountForProductUOM" />
     253                        Units
     254                      </b-field>
     255                  % endif
    248256                </div>
    249257
    250                 <div class="level-item"
    251                      v-if="accountForProductUOM == 'cases' && accountForProductQuantity">
    252                   = {{ accountForProductTotalUnits }}
    253                 </div>
     258                % if allow_cases:
     259                    <div class="level-item"
     260                         v-if="accountForProductUOM == 'cases' && accountForProductQuantity">
     261                      = {{ accountForProductTotalUnits }}
     262                    </div>
     263                % endif
    254264
    255265              </div>
     
    326336
    327337                <div class="level-item">
    328                   <b-input v-model="declareCreditQuantity"
    329                            type="number" step="0.0001"
    330                            ref="declareCreditQuantityInput">
    331                   </b-input>
     338                  <numeric-input v-model="declareCreditQuantity"
     339                                 ref="declareCreditQuantityInput">
     340                  </numeric-input>
    332341                </div>
    333342
    334343                <div class="level-item">
    335                   <b-field>
    336                     <b-radio-button v-model="declareCreditUOM"
    337                                     @click.native="declareCreditUOMClicked('units')"
    338                                     native-value="units">
    339                       Units
    340                     </b-radio-button>
    341                     <b-radio-button v-model="declareCreditUOM"
    342                                     @click.native="declareCreditUOMClicked('cases')"
    343                                     native-value="cases">
    344                       Cases
    345                     </b-radio-button>
    346                   </b-field>
     344                  % if allow_cases:
     345                      <b-field>
     346                        <b-radio-button v-model="declareCreditUOM"
     347                                        @click.native="declareCreditUOMClicked('units')"
     348                                        native-value="units">
     349                          Units
     350                        </b-radio-button>
     351                        <b-radio-button v-model="declareCreditUOM"
     352                                        @click.native="declareCreditUOMClicked('cases')"
     353                                        native-value="cases">
     354                          Cases
     355                        </b-radio-button>
     356                      </b-field>
     357                  % else:
     358                      <b-field>
     359                        <input type="hidden" v-model="declareCreditUOM" />
     360                        Units
     361                      </b-field>
     362                  % endif
    347363                </div>
    348364
    349                 <div class="level-item"
    350                      v-if="declareCreditUOM == 'cases' && declareCreditQuantity">
    351                   = {{ declareCreditTotalUnits }}
    352                 </div>
     365                % if allow_cases:
     366                    <div class="level-item"
     367                         v-if="declareCreditUOM == 'cases' && declareCreditQuantity">
     368                      = {{ declareCreditTotalUnits }}
     369                    </div>
     370                % endif
    353371
    354372              </div>
     
    495513            return true
    496514        }
    497         if (!this.accountForProductQuantity) {
     515        if (!this.accountForProductQuantity || this.accountForProductQuantity == 0) {
    498516            return true
    499517        }
     
    507525        this.accountForProductMode = 'received'
    508526        this.accountForProductExpiration = null
    509         this.accountForProductQuantity = null
     527        this.accountForProductQuantity = 0
    510528        this.accountForProductUOM = 'units'
    511529        this.accountForProductShowDialog = true
     530        this.$nextTick(() => {
     531            this.$refs.accountForProductQuantityInput.select()
     532            this.$refs.accountForProductQuantityInput.focus()
     533        })
    512534    }
    513535
     
    607629            return true
    608630        }
    609         if (!this.declareCreditQuantity) {
     631        if (!this.declareCreditQuantity || this.declareCreditQuantity == 0) {
    610632            return true
    611633        }
     
    619641        this.declareCreditType = null
    620642        this.declareCreditExpiration = null
    621         if (this.rowData.cases_received) {
    622             this.declareCreditQuantity = this.rowData.cases_received
    623             this.declareCreditUOM = 'cases'
    624         } else {
     643        % if allow_cases:
     644            if (this.rowData.cases_received) {
     645                this.declareCreditQuantity = this.rowData.cases_received
     646                this.declareCreditUOM = 'cases'
     647            } else {
     648                this.declareCreditQuantity = this.rowData.units_received
     649                this.declareCreditUOM = 'units'
     650            }
     651        % else:
    625652            this.declareCreditQuantity = this.rowData.units_received
    626653            this.declareCreditUOM = 'units'
    627         }
     654        % endif
    628655        this.declareCreditShowDialog = true
    629656    }
     
    639666        }
    640667
    641         if (this.declareCreditUOM == 'cases') {
    642             params.cases = this.declareCreditQuantity
    643         } else {
     668        % if allow_cases:
     669            if (this.declareCreditUOM == 'cases') {
     670                params.cases = this.declareCreditQuantity
     671            } else {
     672                params.units = this.declareCreditQuantity
     673            }
     674        % else:
    644675            params.units = this.declareCreditQuantity
    645         }
     676        % endif
    646677
    647678        this.submitForm(url, params, response => {
  • tailbone/views/custorders/orders.py

    r92a5213 r17810d9  
    340340            'normalized_batch': self.normalize_batch(batch),
    341341            'new_order_requires_customer': self.batch_handler.new_order_requires_customer(),
    342             'product_key_field': self.rattail_config.product_key(),
    343342            'product_price_may_be_questionable': self.batch_handler.product_price_may_be_questionable(),
    344343            'allow_contact_info_choice': self.batch_handler.allow_contact_info_choice(),
  • tailbone/views/master.py

    r92a5213 r17810d9  
    22092209        }
    22102210
     2211        key = self.rattail_config.product_key()
     2212        context['product_key_field'] = self.product_key_fields.get(key, key)
     2213
    22112214        if self.expose_quickie_search:
    22122215            context['quickie'] = self.get_quickie_context()
  • tailbone/views/products.py

    r92a5213 r17810d9  
    11811181        use_buefy = self.get_use_buefy()
    11821182
    1183         key = self.rattail_config.product_key()
    1184         kwargs['product_key_field'] = self.product_key_fields.get(key, key)
    1185 
    11861183        kwargs['image_url'] = self.products_handler.get_image_url(product)
    11871184
  • tailbone/views/purchasing/batch.py

    r92a5213 r17810d9  
    804804        cases = getattr(row, 'cases_{}'.format(field))
    805805        units = getattr(row, 'units_{}'.format(field))
    806         return app.render_cases_units(cases, units)
     806        # nb. do not render anything if empty quantities
     807        if cases or units:
     808            return app.render_cases_units(cases, units)
    807809
    808810    def make_row_credits_grid(self, row):
     
    816818            columns=[
    817819                'credit_type',
    818                 # 'cases_shorted',
    819                 # 'units_shorted',
    820820                'shorted',
    821821                'credit_total',
     
    828828            labels={
    829829                'credit_type': "Type",
    830                 'cases_shorted': "Cases",
    831                 'units_shorted': "Units",
    832830                'shorted': "Quantity",
    833831                'credit_total': "Total",
    834                 'mispick_upc': "Mispick UPC",
    835                 'mispick_brand_name': "MP Brand",
    836                 'mispick_description': "MP Description",
    837                 'mispick_size': "MP Size",
     832                # 'mispick_upc': "Mispick UPC",
     833                # 'mispick_brand_name': "MP Brand",
     834                # 'mispick_description': "MP Description",
     835                # 'mispick_size': "MP Size",
    838836            })
    839837
    840         g.set_type('cases_shorted', 'quantity')
    841         g.set_type('units_shorted', 'quantity')
    842838        g.set_type('credit_total', 'currency')
     839
     840        if not self.batch_handler.allow_expired_credits():
     841            g.remove('expiration_date')
    843842
    844843        return g
  • tailbone/views/purchasing/receiving.py

    r92a5213 r17810d9  
    153153    row_grid_columns = [
    154154        'sequence',
    155         'upc',
    156         # 'item_id',
     155        '_product_key_',
    157156        'vendor_code',
    158157        'brand_name',
     
    178177        'sequence',
    179178        'item_entry',
    180         'upc',
    181         'item_id',
     179        '_product_key_',
    182180        'vendor_code',
    183181        'product',
     
    770768        row = kwargs['instance']
    771769
     770        kwargs['allow_cases'] = self.batch_handler.allow_cases()
     771
    772772        if row.product:
    773773            kwargs['image_url'] = products_handler.get_image_url(row.product)
     
    777777        if use_buefy:
    778778            kwargs['row_context'] = self.get_context_row(row)
    779             kwargs['possible_receiving_modes'] = POSSIBLE_RECEIVING_MODES
    780             kwargs['possible_credit_types'] = POSSIBLE_CREDIT_TYPES
     779
     780            modes = list(POSSIBLE_RECEIVING_MODES)
     781            types = list(POSSIBLE_CREDIT_TYPES)
     782            if not self.batch_handler.allow_expired_credits():
     783                if 'expired' in modes:
     784                    modes.remove('expired')
     785                if 'expired' in types:
     786                    types.remove('expired')
     787            kwargs['possible_receiving_modes'] = modes
     788            kwargs['possible_credit_types'] = types
    781789
    782790        return kwargs
Note: See TracChangeset for help on using the changeset viewer.