如果firebase数据为0,则Ionic阻止添加数据

时间:2018-02-15 06:06:06

标签: node.js firebase ionic3 angularfire2

我正在制作离子库存应用程序。在我的可用库存页面中,我正在跟踪这样的用户数据:

<ion-item *ngFor="let stock of stocks | async" class="item item-trns text-center"
    (click)="showOptions(stock, stock.$key)">
      <strong><h2>{{ stock.name }}</h2></strong>
      <p>Date added: {{stock.date}}</p>
      <p>Quantity in stock: {{stock.actualq-stock.sold}}</p>
      <p>Sold: {{stock.sold}}</p>

这显示了我的firebase后端所有股票的列表。

showOptions(stock, stock.$key)

提供出售特定商品的选项。

如您所见,库存中的剩余数量计算为

Quantity in stock: {{stock.actualq-stock.sold}}

即实际数量减去已售出的数量。

我的问题: 添加销售时,如何阻止用户添加大于库存中已有数量的销售值?这将导致库存中的负数量值。

我曾尝试使用表单验证,但我无法弄清楚如何检查输入的数据是否会大于我的firebase后端中可用的库存。

如果{{stock.actualq-stock.sold}}为0,是否有办法禁用列表选项?

这是我的卖出功能:

addSale(id,saledate,salequantity,buyingprice,sellingprice,sale,profit,saletotal) {
    if(id) {
      this.stocks.update(id, {
        saledate: saledate,
        salequantity: salequantity,
        buyingprice: buyingprice,
        sellingprice: sellingprice,
        sale: true,
        profit: (sellingprice-buyingprice)*salequantity,
        saletotal: (salequantity*sellingprice),

      }).then( newSale => {
            this.toast.show('Data updated', '5000', 'center').subscribe(
              toast => {
                this.navCtrl.pop();
              }
            );
          })
          .catch(e => {
            console.log(e);
            this.toast.show(e, '5000', 'center').subscribe(
              toast => {
                console.log(toast);
              }
            );
          });

所有这一切都是为了更新正在销售的库存中的特定商品的路径,并添加上面的节点以反映在商品上添加了促销。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要更新库存ID。因此,在更新之前获取当前数据并检查库存并执行更新。尝试

addSale(id,saledate,salequantity,buyingprice,sellingprice,sale,profit,saletotal) {
    if(id) {
        this.db.object('stocks/'+id).snapshotChanges().subscribe(action => {
           console.log(action.payload.val());
           let stockInHand = action.payload.val().actualq-action.payload.val().sold;
           //check if salequantity is lessthan or equal to stockInHand
           if(salequantity <= stockInHand){
               //perform update
           }else{
               //toast no stock available 
           }
        });
    }
}