Compare commits

...
6 Commits
Author SHA1 Message Date
Lauri Ojansivu 3125cefd41 v5.64 2021-10-09 14:42:03 +03:00
Lauri Ojansivu c27a622289 Update WeKan ® 2021-10-09 14:22:26 +03:00
Lauri Ojansivu 51875dc155 Updated translations. 2021-10-09 14:10:32 +03:00
Lauri Ojansivu f9bdfa54e7 Updated ChangeLog. 2021-10-09 14:04:19 +03:00
Lauri Ojansivu 8fbee23797 Merge pull request #4045 from Ben0it-T/master
Excel Export : add board description, add comments worksheet
2021-10-09 14:02:13 +03:00
Ben0it-T 153e4cc3fa Excel Export : add board description, add comments worksheet 2021-10-09 12:20:34 +02:00
15 changed files with 393 additions and 148 deletions

No files matched your search

+8 -2
View File
@@ -1,7 +1,13 @@
[Mac ChangeLog](https://github.com/wekan/wekan/wiki/Mac)
Note: With Docker, please don't use latest tag. Only use release tags.
See https://github.com/wekan/wekan/issues/3874
# v5.64 2021-10-09 WeKan ® release
This release adds the following new features:
- [Excel Export : add board description, add comments worksheet](https://github.com/wekan/wekan/pull/4045).
Thanks to Ben0it-T.
Thanks to above GitHub users for their contributions and translators for their translations.
# v5.63 2021-10-07 Wekan release
+24 -24
View File
@@ -1,6 +1,6 @@
[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/wekan/wekan)
# Wekan - Open Source kanban
# WeKan ® - Open Source kanban
[![Contributors](https://img.shields.io/github/contributors/wekan/wekan.svg "Contributors")](https://github.com/wekan/wekan/graphs/contributors)
[![Docker Repository on Quay](https://quay.io/repository/wekan/wekan/status "Docker Repository on Quay")](https://quay.io/repository/wekan/wekan)
@@ -14,19 +14,19 @@
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fwekan%2Fwekan.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fwekan%2Fwekan?ref=badge_shield)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4619/badge)](https://bestpractices.coreinfrastructure.org/projects/4619)
## [Translate Wekan at Transifex](https://transifex.com/wekan/wekan)
## [Translate WeKan ® at Transifex](https://transifex.com/wekan/wekan)
Translations to non-English languages are accepted only at [Transifex](https://transifex.com/wekan/wekan) using webbrowser.
New English strings of new features can be added as PRs to edge branch file wekan/i18n/en.i18n.json .
## [Wekan feature requests and bugs](https://github.com/wekan/wekan/issues)
Please add most of your questions as GitHub issue: [Wekan Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
Please add most of your questions as GitHub issue: [WeKan ® Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
It's better than at chat where details get lost when chat scrolls up.
## Chat
[Discussions][discussions] - Wekan Community GitHub Discussions, that are not [Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
[Discussions][discussions] - WeKan Community GitHub Discussions, that are not [Feature Requests and Bugs](https://github.com/wekan/wekan/issues).
[Wekan IRC FAQ](https://github.com/wekan/wekan/wiki/IRC-FAQ)
@@ -41,9 +41,9 @@ See https://github.com/wekan/wekan/issues/3874
- Please read the [FAQ](https://github.com/wekan/wekan/wiki/FAQ) first
- Please don't feed the [trolls](https://github.com/wekan/wekan/wiki/FAQ#why-am-i-called-a-troll) and [spammers](https://github.com/wekan/wekan/wiki/FAQ#why-am-i-called-a-spammer) that are mentioned in the FAQ :)
## About Wekan
## About WeKan ®
Wekan is an completely [Open Source][open_source] and [Free software][free_software]
WeKan ® is an completely [Open Source][open_source] and [Free software][free_software]
collaborative kanban board application with MIT license.
Whether you’re maintaining a personal todo list, planning your holidays with some friends,
@@ -51,58 +51,58 @@ or working in a team on your next revolutionary idea, Kanban boards are an unbea
to keep your things organized. They give you a visual overview of the current state of your project,
and make you productive by allowing you to focus on the few items that matter the most.
Since Wekan is a free software, you don’t have to trust us with your data and can
Since WeKan ® is a free software, you don’t have to trust us with your data and can
install Wekan on your own computer or server. In fact we encourage you to do
that by providing one-click installation on various platforms.
- Wekan is used in [most countries of the world](https://snapcraft.io/wekan).
- WeKan ® is used in [most countries of the world](https://snapcraft.io/wekan).
- Wekan largest user has 13k users using Wekan in their company.
- Wekan has been [translated](https://transifex.com/wekan/wekan) to about 63 languages.
- [Features][features]: Wekan has real-time user interface.
- [Platforms][platforms]: Wekan supports many platforms.
Wekan is critical part of new platforms Wekan is currently being integrated to.
- Wekan has been [translated](https://transifex.com/wekan/wekan) to about 70 languages.
- [Features][features]: WeKan ® has real-time user interface.
- [Platforms][platforms]: WeKan ® supports many platforms.
WeKan ® is critical part of new platforms Wekan is currently being integrated to.
## Requirements
- 64bit: Linux [Snap](https://github.com/wekan/wekan-snap/wiki/Install) or [Sandstorm](https://sandstorm.io) /
[Mac](https://github.com/wekan/wekan/wiki/Mac) / [Windows](https://github.com/wekan/wekan/wiki/Install-Wekan-from-source-on-Windows).
[More Platforms](https://github.com/wekan/wekan/wiki/Platforms), bundle for RasPi3 ARM and other CPUs where Node.js and MongoDB exists.
- 1 GB RAM minimum free for Wekan. Production server should have minimum total 4 GB RAM.
- 1 GB RAM minimum free for WeKan ®. Production server should have minimum total 4 GB RAM.
For thousands of users, for example with [Docker](https://github.com/wekan/wekan/blob/master/docker-compose.yml): 3 frontend servers,
each having 2 CPU and 2 wekan-app containers. One backend wekan-db server with many CPUs.
- Enough disk space and alerts about low disk space. If you run out disk space, MongoDB database gets corrupted.
- SECURITY: Updating to newest Wekan version very often. Please check you do not have automatic updates of Sandstorm or Snap turned off.
Old versions have security issues because of old versions Node.js etc. Only newest Wekan is supported.
Wekan on Sandstorm is not usually affected by any Standalone Wekan (Snap/Docker/Source) security issues.
- SECURITY: Updating to newest WeKan ® version very often. Please check you do not have automatic updates of Sandstorm or Snap turned off.
Old versions have security issues because of old versions Node.js etc. Only newest WeKan ® is supported.
WeKan ® on Sandstorm is not usually affected by any Standalone WeKan ® (Snap/Docker/Source) security issues.
- [Reporting all new bugs immediately](https://github.com/wekan/wekan/issues).
New features and fixes are added to Wekan [many times a day](https://github.com/wekan/wekan/blob/master/CHANGELOG.md).
- [Backups](https://github.com/wekan/wekan/wiki/Backup) of Wekan database once a day miminum.
New features and fixes are added to WeKan ® [many times a day](https://github.com/wekan/wekan/blob/master/CHANGELOG.md).
- [Backups](https://github.com/wekan/wekan/wiki/Backup) of WeKan ® database once a day miminum.
Bugs, updates, users deleting list or card, harddrive full, harddrive crash etc can eat your data. There is no undo yet.
Some bug can cause Wekan board to not load at all, requiring manual fixing of database content.
Some bug can cause WeKan ® board to not load at all, requiring manual fixing of database content.
## Roadmap and Demo
[Roadmap][roadmap_wekan] - Public read-only board at Wekan demo.
[Roadmap][roadmap_wekan] - Public read-only board at WeKan ® demo.
[Developer Documentation][dev_docs]
- There is many companies and individuals contributing code to Wekan, to add features and bugfixes
- There is many companies and individuals contributing code to WeKan ®, to add features and bugfixes
[many times a day](https://github.com/wekan/wekan/blob/master/CHANGELOG.md).
- [Please add Add new Feature Requests and Bug Reports immediately](https://github.com/wekan/wekan/issues).
- [Commercial Support](https://wekan.team/commercial-support/).
We also welcome sponsors for features and bugfixes.
By working directly with Wekan you get the benefit of active maintenance and new features added by growing Wekan developer community.
By working directly with WeKan ® you get the benefit of active maintenance and new features added by growing WeKan ® developer community.
## Screenshot
[More screenshots at Features page](https://github.com/wekan/wekan/wiki/Features)
[![Screenshot of Wekan][screenshot_wekan]][roadmap_wekan]
[![Screenshot of WeKan ®][screenshot_wekan]][roadmap_wekan]
## License
Wekan is released under the very permissive [MIT license](LICENSE), and made
WeKan ® is released under the very permissive [MIT license](LICENSE), and made
with [Meteor](https://www.meteor.com).
[platforms]: https://github.com/wekan/wekan/wiki/Platforms
+1 -1
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v5.63.0"
appVersion: "v5.64.0"
files:
userUploads:
- README.md
@@ -21,7 +21,7 @@ template(name='statistics')
table
tbody
tr
th Wekan {{_ 'info'}}
th WeKan ® {{_ 'info'}}
td {{statistics.version}}
tr
th {{_ 'Meteor_version'}}
+1 -1
View File
@@ -1,5 +1,5 @@
apiVersion: v2
appVersion: "5.63"
appVersion: "5.64"
dependencies:
- condition: mongodb.enabled
name: mongodb
+1 -1
View File
@@ -14,7 +14,7 @@ serviceAccounts:
##
image:
repository: quay.io/wekan/wekan
tag: v5.63
tag: v5.64
pullPolicy: IfNotPresent
## Configuration for wekan component
+3 -3
View File
@@ -159,8 +159,8 @@
"card-delete-notice": "Verwijdering is permanent. Je raakt alles acties die gekoppeld zijn aan deze kaart kwijt.",
"card-delete-pop": "Alle acties worden verwijderd van de activiteiten feed, en er zal geen mogelijkheid zijn om de kaart opnieuw te openen. Er is geen herstelmogelijkheid.",
"card-delete-suggest-archive": "Je kunt een kaart naar Archief verplaatsen om die van het bord te verwijderen waarbij de activiteiten behouden blijven.",
"card-archive-pop": "Card will not be visible at this list after archiving card.",
"card-archive-suggest-cancel": "You can later restore card from Archive.",
"card-archive-pop": "Kaart is na archivering niet meer zichtbaar op deze lijst.",
"card-archive-suggest-cancel": "Je kunt de kaart later terughalen vanuit het Archief.",
"card-due": "Verval",
"card-due-on": "Vervalt op ",
"card-spent": "Gespendeerde tijd",
@@ -209,7 +209,7 @@
"deletePokerPopup-title": "Planning poker verwijderen?",
"poker-delete-pop": "Verwijdering is permanent. Je verlies alle acties die gekoppeld zijn aan deze poker sessie.",
"cardDeletePopup-title": "Kaart verwijderen?",
"cardArchivePopup-title": "Archive Card?",
"cardArchivePopup-title": "Kaart archiveren?",
"cardDetailsActionsPopup-title": "Kaart actie ondernemen",
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Leden",
+18 -18
View File
@@ -132,7 +132,7 @@
"auto-watch": "Automatycznie obserwuj tablice gdy zostaną stworzone",
"avatar-too-big": "Awatar jest za duży (maksymalnie 520KB)",
"back": "Wstecz",
"board-change-color": "Zmień barwę",
"board-change-color": "Zmień kolor",
"board-nb-stars": "%s odznaczeń",
"board-not-found": "Nie znaleziono tablicy",
"board-private-info": "Ta tablica będzie <strong>prywatna</strong>.",
@@ -458,7 +458,7 @@
"list-archive-cards-pop": "To usunie wszystkie karty z tej listy z tej tablicy. Aby przejrzeć karty w Archiwum i przywrócić na tablicę, kliknij \"Menu\" > \"Archiwizuj\".",
"list-move-cards": "Przenieś wszystkie karty z tej listy",
"list-select-cards": "Zaznacz wszystkie karty z tej listy",
"set-color-list": "Ustaw barwę",
"set-color-list": "Ustaw kolor",
"listActionPopup-title": "Działania na liście",
"settingsUserPopup-title": "Ustawienia konta użytkownika",
"settingsTeamPopup-title": "Ustawienia Zespołu",
@@ -533,7 +533,7 @@
"rules": "Reguły",
"search-cards": "Szukaj w tytułach kart/list oraz opisach i niestandardowych polach na tej tablicy",
"search-example": "Wpisz tekst do wyszukania i wciśnij Enter",
"select-color": "Wybierz barwę",
"select-color": "Wybierz kolor",
"select-board": "Wybierz tablicę",
"set-wip-limit-value": "Ustaw maksymalny limit kart na tej liście",
"setWipLimitPopup-title": "Ustaw limit kart na liście",
@@ -675,10 +675,10 @@
"card-end-on": "Kończy się",
"editCardReceivedDatePopup-title": "Zmień datę przyjęcia",
"editCardEndDatePopup-title": "Zmień datę zakończenia",
"setCardColorPopup-title": "Ustaw barwę",
"setCardActionsColorPopup-title": "Wybierz barwę",
"setSwimlaneColorPopup-title": "Wybierz barwę",
"setListColorPopup-title": "Wybierz barwę",
"setCardColorPopup-title": "Ustaw kolor",
"setCardActionsColorPopup-title": "Wybierz kolor",
"setSwimlaneColorPopup-title": "Wybierz kolor",
"setListColorPopup-title": "Wybierz kolor",
"assigned-by": "Przypisane przez",
"requested-by": "Zlecone przez",
"card-sorting-by-number": "Sortowanie kart wg numeru",
@@ -764,7 +764,7 @@
"r-label": "etykietę",
"r-member": "użytkownika",
"r-remove-all": "Usuń wszystkich użytkowników tej karty",
"r-set-color": "Ustaw barwę na",
"r-set-color": "Ustaw kolor na",
"r-checklist": "czeklistę",
"r-check-all": "Zaznacz wszystkie",
"r-uncheck-all": "Odznacz wszystkie",
@@ -1022,7 +1022,7 @@
"globalSearch-instructions-operator-limit": "`__operator_limit__:<n>` - gdzie *<n>* to liczba naturalna określająca liczbę kart wyświetlanych na stronie.",
"globalSearch-instructions-notes-1": "Można używać wielu kluczy w jednym zapytaniu.",
"globalSearch-instructions-notes-2": "Operatory tego samego typu są traktowane jako alternatywy. To znaczy, że zwracane są wszystkie karty, w których spełnione jest przynajmniej jedno z kryteriów.\n`__operator_list__:Dostępne __operator_list__:Wstrzymane` zwróci karty znajdujące się na listach o nazwach *Dostępne* i *Wstrzymane*.",
"globalSearch-instructions-notes-3": "Operatory różnego typu traktowane są jako suma logiczna (*AND*). Zwracane są tylko karty pasujące do wszystkich operatorów różnego typu. `__operator_list__:Dostępne __operator_label__:czerwona` zwróci tylko karty z listy *Dostępne*, które mają etykietę o barwie *czerwona*.",
"globalSearch-instructions-notes-3": "Operatory różnego typu traktowane są jako suma logiczna *AND*. Zwracane są tylko karty pasujące do wszystkich operatorów różnego typu. `__operator_list__:Dostępne __operator_label__:czerwona` zwróci tylko karty z listy *Dostępne*, które mają etykietę w kolorze *czerwonym*.",
"globalSearch-instructions-notes-3-2": "Dni można określać za pomocą liczby dodatniej lub ujemnej, albo za pomocą `__predicate_week__`, `__predicate_month__`, `__predicate_quarter__` lub `__predicate_year__` dla bieżącego okresu.",
"globalSearch-instructions-notes-4": "W kluczach wyszukiwania wielkie i małe litery można stosować zamiennie.",
"globalSearch-instructions-notes-5": "Domyślnie karty zarchiwizowane nie są przeszukiwane.",
@@ -1057,15 +1057,15 @@
"copy-swimlane": "Skopiuj ścieżkę",
"copySwimlanePopup-title": "Kopiowanie ścieżki",
"display-card-creator": "Wyświetlaj autora karty",
"wait-spinner": "Wait Spinner",
"Bounce": "Bounce Wait Spinner",
"Cube": "Cube Wait Spinner",
"Cube-Grid": "Cube-Grid Wait Spinner",
"Dot": "Dot Wait Spinner",
"Double-Bounce": "Double Bounce Wait Spinner",
"Rotateplane": "Rotateplane Wait Spinner",
"Scaleout": "Scaleout Wait Spinner",
"Wave": "Wave Wait Spinner",
"wait-spinner": "Animowany wskaźnik postępu",
"Bounce": "Odbijanie",
"Cube": "Sześcian",
"Cube-Grid": "Sześcian-Siatka",
"Dot": "Kropki",
"Double-Bounce": "Podwójne odbicie",
"Rotateplane": "Obrót płaszczyzny",
"Scaleout": "Skalowanie",
"Wave": "Fala",
"maximize-card": "Maksymalizuj kartę",
"minimize-card": "Minimalizuj kartę",
"delete-org-warning-message": "Nie można usunąć tej organizacji. Do organizacji należy co najmniej jeden użytkownik.",
+325 -86
View File
@@ -156,6 +156,8 @@ class ExporterExcel {
return user;
});
//init exceljs workbook
const workbook = createWorkbook();
workbook.creator = TAPi18n.__('export-board','',this.userLanguage);
@@ -364,39 +366,7 @@ class ExporterExcel {
//return new Date(curdate.setHours(curdate.getHours() + 8));
//return curdate;
}
//add blank row
ws.addRow().values = ['', '', '', '', '', ''];
//add kanban info
ws.addRow().values = [
TAPi18n.__('createdAt','',this.userLanguage),
addTZhours(result.createdAt),
TAPi18n.__('modifiedAt','',this.userLanguage),
addTZhours(result.modifiedAt),
TAPi18n.__('members','',this.userLanguage),
jmem,
];
ws.getRow(3).font = {
name: TAPi18n.__('excel-font'),
size: 10,
bold: true,
};
ws.mergeCells('F3:R3');
ws.getCell('B3').style = {
font: {
name: TAPi18n.__('excel-font'),
size: '10',
bold: true,
},
numFmt: 'yyyy/mm/dd hh:mm:ss',
};
ws.getCell('D3').style = {
font: {
name: TAPi18n.__('excel-font'),
size: '10',
bold: true,
},
numFmt: 'yyyy/mm/dd hh:mm:ss',
};
//cell center
function cellCenter(cellno) {
ws.getCell(cellno).alignment = {
@@ -412,13 +382,7 @@ class ExporterExcel {
wrapText: true,
};
}
cellCenter('A3');
cellCenter('B3');
cellCenter('C3');
cellCenter('D3');
cellCenter('E3');
cellLeft('F3');
ws.getRow(3).height = 20;
//all border
function allBorder(cellno) {
ws.getCell(cellno).border = {
@@ -436,12 +400,84 @@ class ExporterExcel {
},
};
}
allBorder('A3');
allBorder('B3');
allBorder('C3');
allBorder('D3');
allBorder('E3');
allBorder('F3');
//add blank row
ws.addRow().values = ['', '', '', '', '', ''];
//add board description
ws.addRow().values = [
TAPi18n.__('description','',this.userLanguage),
result.description,
];
ws.mergeCells('B3:H3');
ws.getRow(3).height = 40;
ws.getRow(3).font = {
name: TAPi18n.__('excel-font'),
size: 10,
};
ws.getCell('A3').style = {
font: {
name: TAPi18n.__('excel-font'),
size: '10',
bold: true,
},
};
ws.getCell(`B3`).alignment = {
wrapText: true,
vertical: 'middle',
};
cellCenter('A3');
//add blank row
ws.addRow().values = ['', '', '', '', '', ''];
//add kanban info
ws.addRow().values = [
TAPi18n.__('createdAt','',this.userLanguage),
addTZhours(result.createdAt),
TAPi18n.__('modifiedAt','',this.userLanguage),
addTZhours(result.modifiedAt),
TAPi18n.__('members','',this.userLanguage),
jmem,
];
ws.getRow(5).font = {
name: TAPi18n.__('excel-font'),
size: 10,
bold: true,
};
ws.mergeCells('F5:R5');
ws.getCell('B5').style = {
font: {
name: TAPi18n.__('excel-font'),
size: '10',
bold: true,
},
numFmt: 'yyyy/mm/dd hh:mm:ss',
};
ws.getCell('D5').style = {
font: {
name: TAPi18n.__('excel-font'),
size: '10',
bold: true,
},
numFmt: 'yyyy/mm/dd hh:mm:ss',
};
cellCenter('A5');
cellCenter('B5');
cellCenter('C5');
cellCenter('D5');
cellCenter('E5');
cellLeft('F5');
ws.getRow(5).height = 20;
allBorder('A5');
allBorder('B5');
allBorder('C5');
allBorder('D5');
allBorder('E5');
allBorder('F5');
//add blank row
ws.addRow().values = [
'',
@@ -483,46 +519,46 @@ class ExporterExcel {
TAPi18n.__('overtime-hours','',this.userLanguage),
TAPi18n.__('spent-time-hours','',this.userLanguage),
];
ws.getRow(5).height = 20;
allBorder('A5');
allBorder('B5');
allBorder('C5');
allBorder('D5');
allBorder('E5');
allBorder('F5');
allBorder('G5');
allBorder('H5');
allBorder('I5');
allBorder('J5');
allBorder('K5');
allBorder('L5');
allBorder('M5');
allBorder('N5');
allBorder('O5');
allBorder('P5');
allBorder('Q5');
allBorder('R5');
cellCenter('A5');
cellCenter('B5');
cellCenter('C5');
cellCenter('D5');
cellCenter('E5');
cellCenter('F5');
cellCenter('G5');
cellCenter('H5');
cellCenter('I5');
cellCenter('J5');
cellCenter('K5');
cellCenter('L5');
cellCenter('M5');
cellCenter('N5');
cellCenter('O5');
cellCenter('P5');
cellCenter('Q5');
cellCenter('R5');
ws.getRow(5).font = {
ws.getRow(7).height = 20;
allBorder('A7');
allBorder('B7');
allBorder('C7');
allBorder('D7');
allBorder('E7');
allBorder('F7');
allBorder('G7');
allBorder('H7');
allBorder('I7');
allBorder('J7');
allBorder('K7');
allBorder('L7');
allBorder('M7');
allBorder('N7');
allBorder('O7');
allBorder('P7');
allBorder('Q7');
allBorder('R7');
cellCenter('A7');
cellCenter('B7');
cellCenter('C7');
cellCenter('D7');
cellCenter('E7');
cellCenter('F7');
cellCenter('G7');
cellCenter('H7');
cellCenter('I7');
cellCenter('J7');
cellCenter('K7');
cellCenter('L7');
cellCenter('M7');
cellCenter('N7');
cellCenter('O7');
cellCenter('P7');
cellCenter('Q7');
cellCenter('R7');
ws.getRow(7).font = {
name: TAPi18n.__('excel-font'),
size: 12,
size: 10,
bold: true,
};
//add blank row
@@ -577,8 +613,12 @@ class ExporterExcel {
jcard.isOvertime ? 'true' : 'false',
jcard.spentTime,
];
const y = Number(i) + 6;
const y = Number(i) + 8;
//ws.getRow(y).height = 25;
ws.getRow(y).font = {
name: TAPi18n.__('excel-font'),
size: 10,
};
allBorder(`A${y}`);
allBorder(`B${y}`);
allBorder(`C${y}`);
@@ -614,6 +654,205 @@ class ExporterExcel {
wrapText: true,
};
}
//Activities worksheet
//init worksheet
const worksheet2 = workbook.addWorksheet(TAPi18n.__('activity','',this.userLanguage), {
properties: {
tabColor: {
argb: 'FFC0000',
},
},
pageSetup: {
paperSize: 9,
orientation: 'landscape',
},
});
//get worksheet
const ws2 = workbook.getWorksheet(TAPi18n.__('activity','',this.userLanguage));
ws2.properties.defaultRowHeight = 20;
//init columns
ws2.columns = [
{
key: 'a',
width: 14,
},
{
key: 'b',
width: 60,
},
{
key: 'c',
width: 40,
},
{
key: 'd',
width: 40,
},
{
key: 'e',
width: 30,
style: {
font: {
name: TAPi18n.__('excel-font'),
size: '10',
},
numFmt: 'yyyy/mm/dd hh:mm:ss',
},
},
{
key: 'f',
width: 30,
style: {
font: {
name: TAPi18n.__('excel-font'),
size: '10',
},
numFmt: 'yyyy/mm/dd hh:mm:ss',
},
},
];
//all border
function allBorderWs2(cellno) {
ws2.getCell(cellno).border = {
top: {
style: 'thin',
},
left: {
style: 'thin',
},
bottom: {
style: 'thin',
},
right: {
style: 'thin',
},
};
}
//add title line
ws2.mergeCells('A1:F1');
ws2.getCell('A1').value = result.title;
ws2.getCell('A1').style = {
font: {
name: TAPi18n.__('excel-font'),
size: '20',
},
};
ws2.getCell('A1').alignment = {
vertical: 'middle',
horizontal: 'center',
wrapText: true,
};
ws2.getRow(1).height = 40;
//add blank row
ws2.addRow().values = ['', '', '', '', '', ''];
//add comment title
ws2.addRow().values = [
TAPi18n.__('number','',this.userLanguage),
TAPi18n.__('activity','',this.userLanguage),
TAPi18n.__('card','',this.userLanguage),
TAPi18n.__('owner','',this.userLanguage),
TAPi18n.__('createdAt','',this.userLanguage),
TAPi18n.__('last-modified-at','',this.userLanguage),
];
ws2.getRow(3).height = 20;
ws2.getRow(3).font = {
name: TAPi18n.__('excel-font'),
size: 10,
bold: true,
};
ws2.getRow(3).alignment = {
vertical: 'middle',
horizontal: 'center',
wrapText: true,
};
allBorderWs2('A3');
allBorderWs2('B3');
allBorderWs2('C3');
allBorderWs2('D3');
allBorderWs2('E3');
allBorderWs2('F3');
//add comment info
for (const i in result.comments) {
const jcomment = result.comments[i];
//card title
const parentCard = result.cards.find(
(card) => card._id === jcomment.cardId,
);
jcomment.cardTitle = parentCard ? parentCard.title : '';
//add comment detail
const t = Number(i) + 1;
ws2.addRow().values = [
t.toString(),
jcomment.text,
jcomment.cardTitle,
jmeml[jcomment.userId],
addTZhours(jcomment.createdAt),
addTZhours(jcomment.modifiedAt),
];
const y = Number(i) + 4;
ws2.getRow(y).font = {
name: TAPi18n.__('excel-font'),
size: 10,
};
ws2.getCell(`A${y}`).alignment = {
vertical: 'middle',
horizontal: 'center',
wrapText: true,
};
ws2.getCell(`B${y}`).alignment = {
vertical: 'middle',
wrapText: true,
};
ws2.getCell(`C${y}`).alignment = {
vertical: 'middle',
wrapText: true,
};
ws2.getCell(`D${y}`).alignment = {
vertical: 'middle',
wrapText: true,
};
ws2.getCell(`E${y}`).alignment = {
vertical: 'middle',
wrapText: true,
};
ws2.getCell(`F${y}`).alignment = {
vertical: 'middle',
wrapText: true,
};
allBorderWs2(`A${y}`);
allBorderWs2(`B${y}`);
allBorderWs2(`C${y}`);
allBorderWs2(`D${y}`);
allBorderWs2(`E${y}`);
allBorderWs2(`F${y}`);
}
workbook.xlsx.write(res).then(function () {});
}
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v5.63.0",
"version": "v5.64.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v5.63.0",
"version": "v5.64.0",
"description": "Open-Source kanban",
"private": true,
"repository": {
+3 -3
View File
@@ -7,7 +7,7 @@
<meta charset="utf-8">
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<title>Wekan REST API v5.63</title>
<title>Wekan REST API v5.64</title>
<style>
</style>
@@ -1555,7 +1555,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
<ul class="toc-list-h1">
<li>
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v5.63">Wekan REST API v5.63</a>
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v5.64">Wekan REST API v5.64</a>
</li>
@@ -2128,7 +2128,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
<div class="page-wrapper">
<div class="dark-box"></div>
<div class="content">
<h1 id="wekan-rest-api">Wekan REST API v5.63</h1>
<h1 id="wekan-rest-api">Wekan REST API v5.64</h1>
<blockquote>
<p>Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.</p>
</blockquote>
+1 -1
View File
@@ -1,7 +1,7 @@
swagger: '2.0'
info:
title: Wekan REST API
version: v5.63
version: v5.64
description: |
The REST API allows you to control and extend Wekan with ease.
+2 -2
View File
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Wekan"),
# The name of the app as it is displayed to the user.
appVersion = 563,
appVersion = 564,
# Increment this for every release.
appMarketingVersion = (defaultText = "5.63.0~2021-10-07"),
appMarketingVersion = (defaultText = "5.64.0~2021-10-09"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,
+3 -3
View File
@@ -1,8 +1,8 @@
name: wekan
version: '5.63'
summary: The open-source kanban
version: '5.64'
summary: Open Source kanban
description: |
Wekan is an open-source and collaborative kanban board application.
WeKan ® is an Open Source and collaborative kanban board application.
Whether you’re maintaining a personal todo list, planning your holidays with some friends, or working in a team on your next revolutionary idea, Kanban boards are an unbeatable tool to keep your things organized. They give you a visual overview of the current state of your project, and make you productive by allowing you to focus on the few items that matter the most.
Depending on target environment, some configuration settings might need to be adjusted.