Hei!
Semmoinen huomautus: kun lasketan hinnat (alvittomat ja alvit), ohjelma käyttää (ainakin tulostusta varten) function calculateRowSum, joka sijaitsee tiedostossa miscfuncs.php. Hinnat lasketaan seuraavaksi:
if ($VATIncluded)
{
$rowSumVAT = $count * $price;
$rowSum = $rowSumVAT / (1 + $VAT / 100);
$rowVAT = $rowSumVAT - $rowSum;
}
else
{
$rowSum = $count * $price;
$rowVAT = $rowSum * ($VAT / 100);
$rowSumVAT = $rowSum + $rowVAT;
}
Mielestäni tämä ei ole oikea tapa laskea hintoja, sillä pelkästään kertolasku ei pyöristä hintoja kahdella desimaalilla. Tämä on ongelma esim. jos yksikköhinnalla on enemmän desimaaleja (esim. 0,123 euroa/yksikkö), tämä voi tapahtua esim. käännösalalla kun laskutetaan sanamäärällä. Kun pyöristys per rivi ei tapahdu, voi olla että lopullinen hinta ei täsmää, eli
Arvonlisäveroton hinta yhteensä + Arvonlisävero yhteensä ei ole yhtä kuin Arvonlisäverollinen hinta yhteensä
vaan siinä on esim. senttiero.
Olen itse muuttanut yllä olevat rivit seuraavaksi:
if ($VATIncluded)
{
$rowSumVAT = round($count * $price, 2);
$rowSum = round(($rowSumVAT / (1 + $VAT / 100)), 2);
$rowVAT = $rowSumVAT - $rowSum;
}
else
{
$rowSum = round($count * $price, 2);
$rowVAT = round(($rowSum * ($VAT / 100)), 2);
$rowSumVAT = $rowSum + $rowVAT;
}
Eli jokainen rivihinta pyöristetään kahdella desimaalilla eikä oteta huomioon lisädesimaaleista. Siinä tapauksessa lopullinen hinta täsmää jos lasketaan yhteen alviton hinta ja alv-määrä.
Yllä olevalla muokkauksella luvut ovat ok tulostetussa laskussa (siis pdf-lasku), mutta se ei muuta laskelmia laskun formissa, ilmeisesti nuo luvut lasketaan erikseen ohjelmassa ja pdf-tiedostossa? En itse löytänyt muita paikkoja missä nuo luvut lasketaan.
Voi kokeilla esim. käyttämällä seuraavat luvut:
yksikköhinta (alviton): 0,026 eur
määrä: 868 kpl
Tässä tapauksessa ohjelma antaa:
Alviton hinta: 22,57 eur
Alv 24%: 5,42 eur
Alvillinen hinta: 27,98 eur
Eli yhteenlasku ei täsmää, kun pitäisi olla 27,99 eur. Pyöristämällä laskelmat round-functionilla, hinta täsmää eli se tekee 27,99 eur.
Voisitteko tarkistaa asian?
R.
UPDATE KLO 23:40
Löysin sen: form.php -tiedostossa suoritetaan sama laskelma ohjelman formia varten (yllä oleva koodi on pdf-tiedostoa varten). Tässä tapauksessa asia on pikkusen monimutkaisempi, koska laskelma tehdään javascriptillä ja pyöristys ei ole niin helppo homma (kts. esim. http://stackoverflow.com/questions/2221167/javascript-formatting-a-rounded-number-to-n-decimals (http://stackoverflow.com/questions/2221167/javascript-formatting-a-rounded-number-to-n-decimals)). Eli pakko lisätä function joka pyöristää ne luvut. Eli form.php:ssä laskelma alkaa riviltä 656 (minulla on käytössä MLInvoice 1.6.1). Siihen olen ensin lisännyt
function round_number(num, dec) {
return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
}
joka pyöristää numeron "num" dec:llä desimaalilla. Ja sitten laskelmat on muutettu seuraavaksi:
if (VATIncluded == 1)
{
sumVAT = items * price;
sumVAT = round_number(sumVAT, 2); // RIVI LISÄTTY
sum = sumVAT / (1 + VATPercent / 100);
sum = round_number(sum, 2); // RIVI LISÄTTY
VAT = sumVAT - sum;
}
else
{
sum = items * price;
sum = round_number(sum, 2); // RIVI LISÄTTY
VAT = sum * (VATPercent / 100);
VAT = round_number(VAT, 2); // RIVI LISÄTTY
sumVAT = sum + VAT;
}
Huom: yllä oleva koodi toistuu kaksi kertaa form.php:ssä.
Tällä tavalla luvut ovat samanlaiset sekä formissa että pdf-tiedostossa.
R.
Hyvä huomio ja ihan totta, pielessähän tämä on. Korjataan täälläkin päässä. Kiitoksia!
--Ere
itsekin olen ihmetellyt hiukan noita alv summia... ja onneksi nyt joku huomasi ongelman ja korjasi sen.. mutta sitten omaan ongelmaani..
Missä kohtaa form.php tiedostossa ko. koodin pätkä on ja pitää muuttaa?
en löydä koko form.php tiedostosta edes hakusanalla number tekstiä?
paitsi nyt sitten huomasin että "samantapainen" koodinpätkä on...
mutta onko oikea?
if (VATIncluded == 1)
{
sumVAT = items * price;
sum = sumVAT / (1 + VATPercent / 100);
VAT = sumVAT - sum;
}
else
{
sum = items * price;
VAT = sum * (VATPercent / 100);
sumVAT = sum + VAT;
}
Ja tuo toistuu 2 kertaa
käytänn MLInvoice versiota 1.8.0
Quote from: kzmx on 06.01.14 - klo:16:20Missä kohtaa form.php tiedostossa ko. koodin pätkä on ja pitää muuttaa?
en löydä koko form.php tiedostosta edes hakusanalla number tekstiä?
Et löydä, koska nuo "sum = round_number..." ovat lisäämäni rivit, eli eivät ole aluperäisessä koodissa.
Quote from: kzmx on 06.01.14 - klo:16:20paitsi nyt sitten huomasin että "samantapainen" koodinpätkä on...
mutta onko oikea?
if (VATIncluded == 1)
{
sumVAT = items * price;
sum = sumVAT / (1 + VATPercent / 100);
VAT = sumVAT - sum;
}
else
{
sum = items * price;
VAT = sum * (VATPercent / 100);
sumVAT = sum + VAT;
}
Ja tuo toistuu 2 kertaa
Jep, juuri niihin (katso yllä oleva viestini).
eli onko ensimmäinen koodin pätkäsi ensimmäisessä postauksessasi if ($VATIncluded)
{
$rowSumVAT = $count * $price;
$rowSum = $rowSumVAT / (1 + $VAT / 100);
$rowVAT = $rowSumVAT - $rowSum;
}
else
{
$rowSum = $count * $price;
$rowVAT = $rowSum * ($VAT / 100);
$rowSumVAT = $rowSum + $rowVAT;
}
myös jo muutettu?
Quote from: kzmx on 13.01.14 - klo:17:33
eli onko ensimmäinen koodin pätkäsi ensimmäisessä postauksessasi if ($VATIncluded)
{
$rowSumVAT = $count * $price;
$rowSum = $rowSumVAT / (1 + $VAT / 100);
$rowVAT = $rowSumVAT - $rowSum;
}
else
{
$rowSum = $count * $price;
$rowVAT = $rowSum * ($VAT / 100);
$rowSumVAT = $rowSum + $rowVAT;
}
myös jo muutettu?
Kyllä se on muutettu kuten lukee ensimmäisessä postauksessani, eli näin:
if ($VATIncluded)
{
$rowSumVAT = round($count * $price, 2);
$rowSum = round(($rowSumVAT / (1 + $VAT / 100)), 2);
$rowVAT = $rowSumVAT - $rowSum;
}
else
{
$rowSum = round($count * $price, 2);
$rowVAT = round(($rowSum * ($VAT / 100)), 2);
$rowSumVAT = $rowSum + $rowVAT;
}
Quote from: kzmx on 13.01.14 - klo:17:33
eli onko ensimmäinen koodin pätkäsi ensimmäisessä postauksessasi if ($VATIncluded)
{
$rowSumVAT = $count * $price;
$rowSum = $rowSumVAT / (1 + $VAT / 100);
$rowVAT = $rowSumVAT - $rowSum;
}
else
{
$rowSum = $count * $price;
$rowVAT = $rowSum * ($VAT / 100);
$rowSumVAT = $rowSum + $rowVAT;
}
myös jo muutettu?
Ja niin jos tarkoitat sitä, että se olisi muutettu suoraan MLInvoicen viralliseen lähdekoodiin, niin vastaus on ei. Olen siis laittanut nuo muutokset vaan omaan käyttämääni versioon.
Commitin https://github.com/emaijala/MLInvoice/commit/22f5666a1ecda888e5aa668763b68c46e7b295cb pitäisi korjata ongelma myös virallisessa versiossa. Kertokaahan, jos siitä uupuu jotain.
t. Ere
Quote from: Rutja76 on 24.01.14 - klo:16:45
Ja niin jos tarkoitat sitä, että se olisi muutettu suoraan MLInvoicen viralliseen lähdekoodiin, niin vastaus on ei. Olen siis laittanut nuo muutokset vaan omaan käyttämääni versioon.
Tarkoitin, että postasit vissiin suoraan korjauksen tänne, etkä myös alkuperäistä form.php tiedostossa olevaa koodin pätkää, kun en kerran sitä löytänyt?
Quote from: Ere Maijala on 25.01.14 - klo:11:10
Commitin https://github.com/emaijala/MLInvoice/commit/22f5666a1ecda888e5aa668763b68c46e7b295cb pitäisi korjata ongelma myös virallisessa versiossa. Kertokaahan, jos siitä uupuu jotain.
t. Ere
mikä versio githubissa on menossa tällähetkellä? vai käykö noi tiedostot githubista suoraan version päälle joka on käytössäni tällä hetkellä 1.8.0?
Quote from: kzmx on 27.01.14 - klo:10:54Tarkoitin, että postasit vissiin suoraan korjauksen tänne, etkä myös alkuperäistä form.php tiedostossa olevaa koodin pätkää, kun en kerran sitä löytänyt?
Ilmeisesti puhutaan eri tiedostoista. Alkuperäisessä postaukseni puhutaan alussa (postaukseni kolmas rivi) tiedostosta miscfuncs.php, josta kyllä löytyy tuo koodi, mistä nyt puhutaan.
Alkuperäisen postaukseni loppupäässä ("UPDATE KLO 23:40" -rivin jälkeen) puhutaan sitten form.php -tiedostosta, ja kyseessä on eri koodipätkä kuin se, minkä postasit.
Molemmat pätkät löytyy myös versiosta 1.8.0.
Quote from: Rutja76 on 14.08.13 - klo:10:20
UPDATE KLO 23:40
Löysin sen: form.php -tiedostossa suoritetaan sama laskelma ohjelman formia varten (yllä oleva koodi on pdf-tiedostoa varten). Tässä tapauksessa asia on pikkusen monimutkaisempi, koska laskelma tehdään javascriptillä ja pyöristys ei ole niin helppo homma (kts. esim. http://stackoverflow.com/questions/2221167/javascript-formatting-a-rounded-number-to-n-decimals (http://stackoverflow.com/questions/2221167/javascript-formatting-a-rounded-number-to-n-decimals)). Eli pakko lisätä function joka pyöristää ne luvut. Eli form.php:ssä laskelma alkaa riviltä 656 (minulla on käytössä MLInvoice 1.6.1). Siihen olen ensin lisännyt
function round_number(num, dec) {
return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
}
joka pyöristää numeron "num" dec:llä desimaalilla. Ja sitten laskelmat on muutettu seuraavaksi:
if (VATIncluded == 1)
{
sumVAT = items * price;
sumVAT = round_number(sumVAT, 2); // RIVI LISÄTTY
sum = sumVAT / (1 + VATPercent / 100);
sum = round_number(sum, 2); // RIVI LISÄTTY
VAT = sumVAT - sum;
}
else
{
sum = items * price;
sum = round_number(sum, 2); // RIVI LISÄTTY
VAT = sum * (VATPercent / 100);
VAT = round_number(VAT, 2); // RIVI LISÄTTY
sumVAT = sum + VAT;
}
Huom: yllä oleva koodi toistuu kaksi kertaa form.php:ssä.
Tällä tavalla luvut ovat samanlaiset sekä formissa että pdf-tiedostossa.
R.
form.php tiedostossa ei ole tekstin pätkää round_number.
vai onko tuo sinun lisäämäsi sinne?
Quote from: kzmx on 27.01.14 - klo:18:06
form.php tiedostossa ei ole tekstin pätkää round_number.
vai onko tuo sinun lisäämäsi sinne?
On minun lisäämäni:
Quote from: Rutja76 on 14.08.13 - klo:10:20
Eli form.php:ssä laskelma alkaa riviltä 656 (minulla on käytössä MLInvoice 1.6.1). Siihen olen ensin lisännyt
function round_number(num, dec) {
return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
}
joka pyöristää numeron "num" dec:llä desimaalilla.
ja sitten nuo rivit, joissa lukee RIVI LISÄTTY, ovat minun lisäämät:
Quote from: Rutja76 on 14.08.13 - klo:10:20
Ja sitten laskelmat on muutettu seuraavaksi:
if (VATIncluded == 1)
{
sumVAT = items * price;
sumVAT = round_number(sumVAT, 2); // RIVI LISÄTTY
sum = sumVAT / (1 + VATPercent / 100);
sum = round_number(sum, 2); // RIVI LISÄTTY
VAT = sumVAT - sum;
}
else
{
sum = items * price;
sum = round_number(sum, 2); // RIVI LISÄTTY
VAT = sum * (VATPercent / 100);
VAT = round_number(VAT, 2); // RIVI LISÄTTY
sumVAT = sum + VAT;
}
Huom: yllä oleva koodi toistuu kaksi kertaa form.php:ssä.
Kaikki muut rivit löytyy alkuperäisestä koodista.
okei.. :D
pitää koittaa säätää tai odottaa päivitystä, kun kerran pdf laskussa se nyt lasketaan omassa versiossa oikein..