2017-05-08 5 views
1

ページ上に次の製品情報があります。 (画像参照)。計算フィールドの逆計算(上書き)Javascript Jquery

Product info image

フィールドは利益、GPの%(grossprofit)とマークアップ%は最初は空です。しかし、編集ボタンをクリックすると、これらのフィールドは価格、付加価値レート、ケースコスト、単価の値に基づいて(オンザフライで)計算されます。今

Product info image - after clicking edit

1は「価格、ケースのコストやバットレートフィールド」、利益、GPを編集し、マークアップしたときに(すなわち、編集の前に、以前に空のフィールド)に応じて調整。

これは、この機能を実現するために使用されたコードです。

<script> 
    function calculate() 
    { 
     //Fields that are used for calculations (declare variables) 
     var casecost = parseFloat($('#q_casecost').val()); 
     var casesize = parseFloat($('#q_casesize').val()); 
     var price = parseFloat($('#q_sellprice').val()); 
     var profit = parseFloat($('#q_profit').val());  
     var unitcost = parseFloat($('#q_unitcost')); 
     var vatrate = parseFloat($('#vat_guid option:selected').text()); //dropdownlist    
     var markup = parseFloat($('#q_markup').val());      

     //Calculations 
     var unitcost = casecost/casesize; // get unitcost from casecost FIELD and casesize FIELD  

     var markuprate = ((price - unitcost)/unitcost) * 100; 

     //var markupvalue = (markuprate/100) * unitcost; 

     var price = ((markuprate/100) * unitcost) + unitcost;    

     var profit = (price - unitcost) - ((vatrate/100) * price); 

     var grossprofit = (profit/price) * 100;   

     //set results (calculations) to the updating fields 
     if (isNaN(casecost) || isNaN(casesize) || isNaN(vatrate)) { return; } 
     $('#q_casecost').val(casecost.toFixed(2)); 
     $('#q_unitcost').val(unitcost.toFixed(2));    
     $('#q_profit').val(profit.toFixed(2)); 
     $('#q_grossprofit').val(grossprofit.toFixed(2));    
     $('#q_sellprice').val(price.toFixed(2)); 
     $('#q_markup').val(markuprate.toFixed(2));    
    }    

    $(document).ready(function() { 
     calculate(); // calculate on page load 

     //calculate every time these following fields change || monitor the fields that affect changes    
     $('#vat_guid').change(calculate); //dropdownlist value sent to calculate 
     $('#q_casecost').change(calculate); 
     $('#q_casesize').change(calculate); 
     //$('#q_unitcost').change(calculate); //for REVERSE calculation of case cost 
     $('#q_profit').change(calculate); 
     $('#q_markup').change(calculate); 
     $('#q_sellprice').change(calculate);    
     $(price).val(calculate); 
     $(unitcost).change(calculate); 
     $(profit).change(calculate); 
     $(markuprate).change(calculate);  
     //$(markupvalue).change(calculate);       
    }); 
</script> 

今、私が達成しようとしている次のことは、MARK UPフィールドに入力し、利益、GPと価格はそれに応じて調整していすることができることです。たとえば、100%のマークアップを希望する場合に料金を支払うべき料金を確認したい場合は、それに応じて価格フィールドを更新します。

現時点では、[マークアップ]フィールドに値を入力すると、計算された値に戻って価格に反映されません。私はすでにコード内のマークアップ値に基づいて自分の価格の計算をしています

var price = ((markuprate/100) * unitcost) + unitcost; 

この機能を使用するには何が欠けていますか?

+0

を追加し、価格れた場所を見ることができますか?現時点では、どのフィールドの変更についても1つの計算しかありません。どのフィールドが変更されたかを検出し、正しい計算を適用する必要があります。 – Danmoreng

+0

現在、価格からマークアップ率を計算しています。次に、ちょうど計算されたマークアップ率から価格を計算します。だから、マークアップ入力を変更しても何もしないのです。どの入力が変更されたかを確認し、マークアップ率で価格または価格でマークアップ率を計算する必要があります。 – Danmoreng

+0

ヒント@Danmorengのおかげで、私はこの $( '#q_markup')の価格計算をラップすることができました。(function calculate(){ }); それが働いた。あなたのタイトルに – LavsTo

答えて

0

将来的には、この問題を巡って誰かが助けてくれるかもしれません。端部/底部の

function calculate() 
{ 
    ---- 
} 

私はmark_upテキストボックスに変更(イベント)機能を追加したフィールドを更新する元の計算を設定した後、次のように(項目の順序は、jQueryを使って重要であると思われます) - その変更されたイベントは、1つのマークが、それは計算の価格およびその他が逆になります変更した場合、それは、その後、マークアップやその他の適切なフィールドを更新しますので、1その後、価格を変更することができ、新たな更新/計算

//REVERSE CALCULATIONS 
      //calculate new price, profit and GP, WHEN NEW MARKUP VALUE IS TYPED 
      $('#q_markup').change(function calculate() { 

       var markuprateChanged = parseFloat($('#q_markup').val()); 
       //alert("Mark up rate changed to " + markuprateChanged); 
       var price = ((markuprateChanged/100) * unitcost) + unitcost; 
       $('#item_q_sellprice').val(price.toFixed(2)); 
       //alert("Price is " + price); 

       var newPrice = parseFloat($('#item_q_sellprice').val()); 
       var profitChanged = (newPrice - unitcost) - ((vatrate/100) * newPrice); 
       //alert("Profit is " + profitChanged); 
       $('#q_profit').val(profitChanged.toFixed(2)); 

       var newGrossProfit = (profitChanged/newPrice) * 100; 
       //alert("Grossprofit changed to " + newGrossProfit); 
       $('#q_grossprofit').val(newGrossProfit.toFixed(2)); 
      }); 

との適切なテキストボックスを更新します適切なフィールド。

完全なコードは次のようであるので、あなたは、マークアップが変更された場合、この目的球は、私はあなたが修正し得る場合は、価格が変更された場合、マークアップを計算したい、

<script> 
     function calculate() 
     { 
      //Fields that are used for calculations (declare variables) 
      var casecost = parseFloat($('#item_Casecost').val()); 
      var casesize = parseFloat($('#item_Casesize').val()); 
      var price = parseFloat($('#item_q_sellprice').val()); 
      var profit = parseFloat($('#q_profit').val()); 
      var unitcost = parseFloat($('#q_unitcost').val()); 
      var vatrate = parseFloat($('#vat_guid option:selected').text()); //dropdownlist 
      var markuprateChanged = parseFloat($('#q_markup').val()); 

      //Calculations 
      var unitcost = casecost/casesize; // get unitcost from casecost FIELD and casesize FIELD 

      var markuprate = ((price - unitcost)/unitcost) * 100; 

      //var markupvalue = (markuprate/100) * unitcost; 

      //var price = ((markuprateChanged/100) * unitcost) + unitcost; 
      var price = parseFloat($('#item_q_sellprice').val()); 
      //alert("Price is " + price); 

      var profit = (price - unitcost) - ((vatrate/100) * price); 

      var grossprofit = (profit/price) * 100; 

      //set results (calculations) to the updating fields 
      if (isNaN(casecost) || isNaN(casesize) || isNaN(vatrate)) { return; } 
      $('#item_Casecost').val(casecost.toFixed(2)); 
      $('#q_unitcost').val(unitcost.toFixed(2)); 
      $('#q_profit').val(profit.toFixed(2)); 
      $('#q_grossprofit').val(grossprofit.toFixed(2)); 
      $('#item_q_sellprice').val(price.toFixed(2)); 
      $('#q_markup').val(markuprate.toFixed(2)); 

      //REVERSE CALCULATIONS 
      //calculate new price, profit and GP, WHEN NEW MARKUP VALUE IS TYPED 
      $('#q_markup').change(function calculate() { 

       var markuprateChanged = parseFloat($('#q_markup').val()); 
       //alert("Mark up rate changed to " + markuprateChanged); 
       var price = ((markuprateChanged/100) * unitcost) + unitcost; 
       $('#item_q_sellprice').val(price.toFixed(2)); 
       //alert("Price is " + price); 

       var newPrice = parseFloat($('#item_q_sellprice').val()); 
       var profitChanged = (newPrice - unitcost) - ((vatrate/100) * newPrice); 
       //alert("Profit is " + profitChanged); 
       $('#q_profit').val(profitChanged.toFixed(2)); 

       var newGrossProfit = (profitChanged/newPrice) * 100; 
       //alert("Grossprofit changed to " + newGrossProfit); 
       $('#q_grossprofit').val(newGrossProfit.toFixed(2)); 
      }); 
     } 

     $(document).ready(function() { 
      calculate(); // calculate on page load 

      //calculate everytime these following fields change || monitor the fields that affect changes 
      $('#vat_guid').change(calculate); //dropdownlist value sent to calculate 
      $('#item_Casecost').change(calculate); 
      $('#item_Casesize').change(calculate); 
      //$('#q_unitcost').change(calculate); //for REVERSE calculation of case cost 
      $('#q_profit').change(calculate); 
      $('#q_markup').change(calculate); 
      $('#item_q_sellprice').change(calculate); 
      //$(price).val(calculate); 
      $(unitcost).change(calculate); 
      $(profit).change(calculate); 
      $(markuprate).change(calculate); 
      //$(markupvalue).change(calculate); 
     }); 
    </script>