Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to change output of totals block? #376

Open
jpschm opened this issue May 18, 2018 · 2 comments
Open

How to change output of totals block? #376

jpschm opened this issue May 18, 2018 · 2 comments

Comments

@jpschm
Copy link

jpschm commented May 18, 2018

Hi there,

I have an issue with my pdf invoices, that you can maybe help me with.
I don't know if this has been asked before, at least I didn't find anything.

When I print invoices they have the following totals included:
(I'll list them with actual numbers as an example):

Subtotal (excl. tax) - 539,41
Subtotal (incl. tax) - 641,90
Tax (19%) - 102,49
Tax - 102,49
Total - 641,90

I hope I translated those correctly as in my invoice everything is in german.
The original values are in the same order as above:

Zwischensumme (zzg. Steuern)
Zwischensumme (inkl. Steuern)
MwSt (19%)
Steuer
Gesamtsumme

Now I have been asked to change the output to:

Subtotal (excl. tax) - Zwischensumme (netto)
Shipping (excl. tax) - Versandkosten (netto)
Total (excl. tax) - Summe (netto)
Tax (19%) - MwSt (19%)
Total (incl. tax) - Summe (brutto)

How can I address this?
Where are these fields in the invoice coming from?

From what I found these are inserted in the insertTotals function in the Abstract.php which I guess I could overwrite in my own engine.
Unfortunately my PHP and/or Magento skills aren't good enough to actually understand what is happening in this function, as It seems to me the totals (or which totals to be used) aren't defined there but coming from somewhere else.
Can you give me a hint on what may be the best way to change the output into something like above?
Many thanks in advance.

@Schrank
Copy link
Member

Schrank commented May 18, 2018

I think the totals are printed here:
https://github.com/firegento/firegento-pdf/blob/development/src/app/code/community/FireGento/Pdf/Model/Engine/Abstract.php#L937-L966

The totals are in an array, so you can either just echo them one by one, but then if you add new totals, they won't show up.

I would order them by the key, which is the type of the total, by using uksort. Unfortunately functional programming is not common by php programmes, so this might be outside of your skill :-/

@jpschm
Copy link
Author

jpschm commented Jun 27, 2018

Thanks for your reply. I didn't try it yet though, but I guess this should do the trick.
Sorting the array $total with uksort after:
$total->setOrder($order)->setSource($source);
ab

Do you maybe have an idea on how I can add new totals to the print out too?
I guess I could insert new entrys into the array too but I guess I'd have to create new classes too then because I'd need the canDisplay() setFont() and all other methods that are used there, right?

Maybe that's a bit too much because basically all I need is an additional subtotal like for example:

in Invoice: Total (excl. tax) = Subtotal (excl. tax) - Shipping & Handling (excl. tax)
in Creditmemo: Total (incl. tax) = Subtotal (incl. tax) +/- Adjustment Fee/Adjustment Refund

So that there's actually already a Total (excl. tax) before the tax is added. (Or the other way around for creditmemos).

I was thinking about adding an if-block to the foreach ($uniqueTotalsForDisplay as $totalData) loop.
https://github.com/firegento/firegento-pdf/blob/development/src/app/code/community/FireGento/Pdf/Model/Engine/Abstract.php#L948-L964
But I guess I Can't use the arry field ids there to identify the total after which I need to add my own one.
So I was thinking about modifying the loop something like this:

//Get translation of Label to search for   
$labelToSearchFor = Mage::helper('tax')->__('Grand Total (Incl. Tax)'); 
//Get translation of label to add  
$labelToAdd = Mage::helper('tax')->__('some label');    

foreach ($uniqueTotalsForDisplay as $totalData) {
    $label = $this->fixNumberFormat($totalData['label']);

// First add total to the output array

    $lineBlock['lines'][] = array(
        array(
            'text'      => $label,
            'feed'      => 470,
            'align'     => 'right',
            'font_size' => $totalData['font_size']
        ),
        array(
            'text'      => $totalData['amount'],
            'feed'      => 540,
            'align'     => 'right',
            'font_size' => $totalData['font_size']
        ),
     );

// If total matches the searched one add own total afterwards

 if ($label == $labelToSearchFor){
    //add own total to the array
 }
}

I didn't test this yet it's just an idea.
Would something like this work?
Or is there a better or even easier way maybe?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants