Invoice payment :: cheque printing PDF

This commit is contained in:
walid seghier
2022-10-11 14:58:32 +01:00
parent e47a7103c7
commit 87e01db551
11 changed files with 2224 additions and 0 deletions

View File

@@ -128,11 +128,14 @@ import com.axelor.auth.db.repo.UserRepository;
import com.axelor.base.service.ical.ICalendarEventService;
import com.axelor.base.service.ical.ICalendarEventServiceImpl;
import com.axelor.team.db.repo.TeamTaskRepository;
import com.axelor.apps.base.service.ConvertNumberToFrenchWordsService;
import com.axelor.apps.base.service.ConvertNumberToFrenchWordsServiceImpl;
public class BaseModule extends AxelorModule {
@Override
protected void configure() {
bind(ConvertNumberToFrenchWordsService.class).to(ConvertNumberToFrenchWordsServiceImpl.class);
bind(SophalService.class).to(SophalServiceImpl.class);
bind(AddressService.class).to(AddressServiceImpl.class);
bind(AdvancedExportService.class).to(AdvancedExportServiceImpl.class);

View File

@@ -0,0 +1,26 @@
/*
* Axelor Business Solutions
*
* Copyright (C) 2020 Axelor (<http://axelor.com>).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.axelor.apps.base.service;
public interface ConvertNumberToFrenchWordsService {
public String convert(long number);
}

View File

@@ -0,0 +1,217 @@
/*
* Axelor Business Solutions
*
* Copyright (C) 2020 Axelor (<http://axelor.com>).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.axelor.apps.base.service;
import java.text.DecimalFormat;
public class ConvertNumberToFrenchWordsServiceImpl implements ConvertNumberToFrenchWordsService {
private final String[] dizaineNames = { "", //
"", //
"vingt", //
"trente", //
"quarante", //
"cinquante", //
"soixante", //
"soixante", //
"quatre-vingt", //
"quatre-vingt" //
};
private final String[] uniteNames1 = { "", //
"un", //
"deux", //
"trois", //
"quatre", //
"cinq", //
"six", //
"sept", //
"huit", //
"neuf", //
"dix", //
"onze", //
"douze", //
"treize", //
"quatorze", //
"quinze", //
"seize", //
"dix-sept", //
"dix-huit", //
"dix-neuf" //
};
private final String[] uniteNames2 = { "", //
"", //
"deux", //
"trois", //
"quatre", //
"cinq", //
"six", //
"sept", //
"huit", //
"neuf", //
"dix" //
};
private String convertZeroToHundred(int number) {
int laDizaine = number / 10;
int lUnite = number % 10;
String resultat = "";
switch (laDizaine) {
case 1:
case 7:
case 9:
lUnite = lUnite + 10;
break;
default:
}
String laLiaison = "";
if (laDizaine > 1) {
laLiaison = "-";
}
switch (lUnite) {
case 0:
laLiaison = "";
break;
case 1:
if (laDizaine == 8) {
laLiaison = "-";
} else {
laLiaison = " et ";
}
break;
case 11:
if (laDizaine == 7) {
laLiaison = " et ";
}
break;
default:
}
// dizaines en lettres
switch (laDizaine) {
case 0:
resultat = uniteNames1[lUnite];
break;
case 8:
if (lUnite == 0) {
resultat = dizaineNames[laDizaine];
} else {
resultat = dizaineNames[laDizaine] + laLiaison + uniteNames1[lUnite];
}
break;
default:
resultat = dizaineNames[laDizaine] + laLiaison + uniteNames1[lUnite];
}
return resultat;
}
private String convertLessThanOneThousand(int number) {
int lesCentaines = number / 100;
int leReste = number % 100;
String sReste = convertZeroToHundred(leReste);
String resultat;
switch (lesCentaines) {
case 0:
resultat = sReste;
break;
case 1:
if (leReste > 0) {
resultat = "cent " + sReste;
} else {
resultat = "cent";
}
break;
default:
if (leReste > 0) {
resultat = uniteNames2[lesCentaines] + " cent " + sReste;
} else {
resultat = uniteNames2[lesCentaines] + " cents";
}
}
return resultat;
}
public String convert(long number) {
if (number == 0) {
return "zero";
}
String snumber = Long.toString(number);
String mask = "000000000000";
DecimalFormat df = new DecimalFormat(mask);
snumber = df.format(number);
int lesMilliards = Integer.parseInt(snumber.substring(0, 3));
int lesMillions = Integer.parseInt(snumber.substring(3, 6));
int lesCentMille = Integer.parseInt(snumber.substring(6, 9));
int lesMille = Integer.parseInt(snumber.substring(9, 12));
String tradMilliards;
switch (lesMilliards) {
case 0:
tradMilliards = "";
break;
case 1:
tradMilliards = convertLessThanOneThousand(lesMilliards) + " milliard ";
break;
default:
tradMilliards = convertLessThanOneThousand(lesMilliards) + " milliards ";
}
String resultat = tradMilliards;
String tradMillions;
switch (lesMillions) {
case 0:
tradMillions = "";
break;
case 1:
tradMillions = convertLessThanOneThousand(lesMillions) + " million ";
break;
default:
tradMillions = convertLessThanOneThousand(lesMillions) + " millions ";
}
resultat = resultat + tradMillions;
String tradCentMille;
switch (lesCentMille) {
case 0:
tradCentMille = "";
break;
case 1:
tradCentMille = "mille ";
break;
default:
tradCentMille = convertLessThanOneThousand(lesCentMille) + " mille ";
}
resultat = resultat + tradCentMille;
String tradMille;
tradMille = convertLessThanOneThousand(lesMille);
resultat = resultat + tradMille;
return resultat;
}
}