1. Fabrik 3.9 has been released. If you have updated Joomla to 3.9, this is a required update.
    Dismiss Notice

calcoli su tabella collegata

Discussion in 'Community' started by meclus, Jul 27, 2020.

  1. meclus

    meclus New Member

    Level: Community
    Hello,
    I try to translate with translate; With Fabrik Vers 3.9.2, I would like to create a billing form, besides the header the body of the invoice has repeated fields(Img001) Img001.png
    ---
    I inserted these in the invoice table but then I set in a group (002_RigheFatt) and I said that it must be repeated. and that's a beautiful feature.
    Img002.png
    ---
    in each row there are the calculations q.ta * Row, but I can't make the sum of the different rows. the fields are as follows (Img004)
    Img004.png
    ---
    after the body group, in which the lines are repeated, I inserted the totals cell, and I made a calculation which, however, does not work, (Img005)
    Img005.png
    ---
    I would be very grateful if you could help me. Early thanks not only for the help but also for any suggestions. Regards Gaetano
     
    Last edited: Jul 28, 2020
  2. juuser

    juuser Active Member

    Level: Community
    Hi, Italian is a beautiful language, but in this forum please post in English only. Otherwise it will be difficult for you to get the support you need.
     
  3. meclus

    meclus New Member

    Level: Community
    Good morning,
    I tried to do the translation with google traslator, unfortunately the images I have in Italian, I hope you can help me, and thank you in advance.
    Best regards
    Gaetano
     
  4. juuser

    juuser Active Member

    Level: Community
    Thanks, seems clear now. This can be done with Javascript in "form_XX.js" file. But first you could try a new "total" element instead of your "calc" element. Haven't tested it myself , but having a quick look at the description, it might do the trick.
     
  5. meclus

    meclus New Member

    Level: Community
    Thanks for the tip, I had tried to sum the field in the table element window, but it didn't work, it doesn't produce anything.
     

    Attached Files:

  6. juuser

    juuser Active Member

    Level: Community
    OK, your field elements probably should need to trigger the change event for the total element, otherwise it's not updating on the fly.

    For the form_XX,js method, here is one useful thread:
    http://fabrikar.com/forums/index.ph...ation-from-subtotals-on-repeated-group.40319/

    Also read the wiki article, if you already haven't:
    http://fabrikar.com/forums/index.php?wiki/form-javascript-objects/

    And here is a sample code for calculating the total some of repeat elements:

    Code (Text):
    requirejs(['fab/fabrik'], function() {
        function total_revenue() {
    // use form_X where X is your numeric form ID
            var form = Fabrik.getBlock('form_61');

    // replace 177 with your numeric group ID for the repat group
            var repeats = form.repeatGroupMarkers[177]
            var revenuesTotal = 0;

            for (c = 0; c < repeats; c++) {
                // replace foo_repeat___whatever_ with the relevant element names in the repeat group, but keep the appended _
                //get repetable object
                var elObjectName = '1_et_projects_177_repeat___revenue_amount_' + c;
                //get repetable object value
                var elObjectVal = form.formElements.get(elObjectName).getValue();


                if (elObjectVal != '') {
                    var elRevenueVal = elObjectVal;
                    revenuesTotal += elRevenueVal.toFloat();
                }
            }

        // replace foo___total_price with the element name
            form.formElements.get('1_et_projects___revenue_sum').update(revenuesTotal.toString());
        }
        //function total end
     
     
     
        function total_expenses() {
    // use form_X where X is your numeric form ID
            var form = Fabrik.getBlock('form_61');

    // replace 17 with your numeric group ID for the repat group
            var repeats = form.repeatGroupMarkers[178]
            var expensesTotal = 0;

            for (c = 0; c < repeats; c++) {
                // replace foo_repeat___whatever_ with the relevant element names in the repeat group, but keep the appended _
                //get repetable object
                var elObjectName = '1_et_projects_178_repeat___expense_amount_' + c;
                //get repetable object value
                var elObjectVal = form.formElements.get(elObjectName).getValue();


                if (elObjectVal != '') {
                    var elExpensesVal = elObjectVal;
                    expensesTotal += elExpensesVal.toFloat();
                }
            }

        // replace foo___total_price with the element name
            form.formElements.get('1_et_projects___expenses_amount').update(expensesTotal.toString());
        }
        //function total end
     
         
        function total_overall() {
    // use form_X where X is your numeric form ID
            var form = Fabrik.getBlock('form_61');


                // replace foo_repeat___whatever_ with the relevant element names in the repeat group, but keep the appended _
                //get repetable object
                var elObjectName1 = '1_et_projects___revenue_sum';
                var elObjectName2 = '1_et_projects___expenses_amount';
                //get repetable object value
                var elObjectVal1 = form.formElements.get(elObjectName1).getValue();
                var elObjectVal2 = form.formElements.get(elObjectName2).getValue();

                if (elObjectVal1 != '') {
     
                   OverallRevenue = elObjectVal1 - elObjectVal2;
                }
     
        // replace foo___total_price with the element name
            form.formElements.get('1_et_projects___total_amount').update(OverallRevenue.toString()+".-");
        }
        //function total overall end
     


        // Add events when adding/deleting groups
        Fabrik.addEvent('fabrik.form.group.duplicate.end', function(form, event) {
            total_revenue();
            total_expenses();
            total_overall()
        });

        Fabrik.addEvent('fabrik.form.group.delete.end', function(form, event) {
           // total_revenue();
        });

        document.addEvent('blur:relay(input[name^=1_et_projects_177_repeat___revenue_amount])', function() {
            total_revenue();
            total_overall()
        })
           document.addEvent('blur:relay(input[name^=1_et_projects_178_repeat___expense_amount])', function() {
            total_expenses();
            total_overall()
        })
     
    })
    I hope this gets you started!
     
  7. meclus

    meclus New Member

    Level: Community
    Many thanks, I hope I can understand where I need to insert and customize this block of code. I tell you as soon as I do .. thanks again.
    Regards
    Gaetano
     

Share This Page