From d59bb790209e248d534777c2c47f52fd0b88c244 Mon Sep 17 00:00:00 2001 From: Kilian Saffran Date: Sun, 18 Oct 2020 08:55:06 +0200 Subject: [PATCH] v20201017 --- .vscode/settings.json | 4 +- desktopapp/dialogs/InvoiceBooking.html | 130 +++++++++++++++++++++++++ desktopapp/dialogs/SelectProduct.html | 17 ++++ desktopapp/js/dataform.js | 5 +- desktopapp/js/global/myapp.js | 17 +--- desktopapp/js/global/renderer.js | 4 +- desktopapp/js/global/report.js | 29 ++++-- desktopapp/js/global/sqlite.js | 18 +++- desktopapp/js/modules/invoice.js | 69 +++++++++++-- desktopapp/js/modules/products.js | 6 ++ desktopapp/panels/invoice.html | 10 +- install/createmacicon.pl | 30 ------ install/createmacicon.sh | 33 +++++++ install/macos_dmg.sh | 89 ++++++++--------- 14 files changed, 339 insertions(+), 122 deletions(-) create mode 100644 desktopapp/dialogs/InvoiceBooking.html create mode 100644 desktopapp/dialogs/SelectProduct.html delete mode 100644 install/createmacicon.pl create mode 100644 install/createmacicon.sh diff --git a/.vscode/settings.json b/.vscode/settings.json index 9338e0c..693624f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,5 @@ { - "perlSyntax.includePaths": [ - "D:/Workspace/invoicejournal/server/lib" -], + "tidyHtml.formatOnSave": false, "tidyHtml.optionsTidy": { "indent-attributes": false, diff --git a/desktopapp/dialogs/InvoiceBooking.html b/desktopapp/dialogs/InvoiceBooking.html new file mode 100644 index 0000000..ebf5705 --- /dev/null +++ b/desktopapp/dialogs/InvoiceBooking.html @@ -0,0 +1,130 @@ + \ No newline at end of file diff --git a/desktopapp/dialogs/SelectProduct.html b/desktopapp/dialogs/SelectProduct.html new file mode 100644 index 0000000..b38ec1e --- /dev/null +++ b/desktopapp/dialogs/SelectProduct.html @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/desktopapp/js/dataform.js b/desktopapp/js/dataform.js index 6f8f081..b7ddb78 100644 --- a/desktopapp/js/dataform.js +++ b/desktopapp/js/dataform.js @@ -176,12 +176,12 @@ let dataform = { // }, fillform: function(dataclass,choices,data){ var frm = document.querySelectorAll('.data_'+ dataclass); - console.log("frmdata",frm); + //console.log("frmdata",frm); if (data){ for (var f in frm){ var tblid = null; - console.log("ID",frm[f].id); + //console.log("ID",frm[f].id); if (frm[f].id){ tblid = frm[f].id.replace(dataclass + "_",""); frm[f].dataset.id=data['id']; @@ -268,7 +268,6 @@ let dataform = { } } db.exec("UPDATE "+ fdata["table"]+" SET "+fdata["column"]+"='"+ fdata["value"] + "' WHERE id='" + fdata["id"]+ "';"); - //postData("db.cgi",fdata).then(data => { if (callback){callback(data);}}); return false; }, // saveschemafield: function(obj,schema){ diff --git a/desktopapp/js/global/myapp.js b/desktopapp/js/global/myapp.js index 09e6ba5..cf7724d 100644 --- a/desktopapp/js/global/myapp.js +++ b/desktopapp/js/global/myapp.js @@ -57,20 +57,9 @@ var myapp = { //}); }, - // getpage: function(modulepage,data) { - // //var rdata = {"page":modulepage}; - // let params = []; - // if (typeof data == 'object') { - // for (var i in data) { - // params.push(i+'=' + encodeURIComponent(data[i])); - // } - // } else { - // params = [data]; - // } - // console.log('modules/'+ modulepage +'.html' + ((params.length > 0)?"?" + params.join("&"):"")); - // document.getElementById("moduleframe").src= 'modules/'+ modulepage +'.html' + ((params.length > 0)?"?" + params.join("&"):""); - // return false; - // }, + closeDialog: function(){ + document.getElementById("dlg" + dlgname).style.display = 'none'; + }, confirm(title,message,strbtnok,strbtncancel,action){ document.getElementById("dlgconfirm_title").innerHTML = title; document.getElementById("dlgconfirm_message").innerHTML = message; diff --git a/desktopapp/js/global/renderer.js b/desktopapp/js/global/renderer.js index 35dea04..f169a2b 100644 --- a/desktopapp/js/global/renderer.js +++ b/desktopapp/js/global/renderer.js @@ -6,9 +6,9 @@ let usersystem = { profilepath: function(){ let ppath=""; if (os.platform() == "darwin"){ - ppath = os.homedir() + '/Library/Application Support/invoicejournal/'; + ppath = os.homedir().replace(/\\/g,"/") + '/Library/Application Support/invoicejournal/'; } else if (os.platform() == "win32") { - ppath = os.homedir() + '/AppData/Roaming/invoicejournal/'; + ppath = os.homedir().replace(/\\/g,"/") + '/AppData/Roaming/invoicejournal/'; } return ppath; }, diff --git a/desktopapp/js/global/report.js b/desktopapp/js/global/report.js index 338c741..613782a 100644 --- a/desktopapp/js/global/report.js +++ b/desktopapp/js/global/report.js @@ -3,6 +3,7 @@ const { spawn } = require('child_process'); let report = { id_report: null, tmpfolder: usersystem.profilepath() + 'tmp/', + tmpoutput: null, output: null, pdfoptions: null, data: null, @@ -16,11 +17,16 @@ let report = { generate: function(id_report,reportdata,fname){ db.query("select * from newreports WHERE id='"+id_report+"';").then(data => { console.log(data); + report.id_report = id_report; + report.tmpoutput = report.tmpfolder + fname + ".pdf"; report.output = preferences.global.currentdataset.datapath + '/' + data.reporttype + '/' + fname + ".test.pdf"; - report.pdfoptions = data.pdfoptions; + report.pdfoptions = JSON.parse(data.pdfoptions); if (!fs.existsSync(report.tmpfolder)){ fs.mkdirSync(usersystem.profilepath() + 'tmp/'); } + if (fs.existsSync(report.tmpfolder + fname + ".pdf")){ + fs.unlinkSync(report.tmpfolder + fname + ".pdf"); + } if (fs.existsSync(report.tmpfolder + id_report + ".content.html")){ fs.unlinkSync(report.tmpfolder + id_report + ".content.html"); } @@ -53,13 +59,15 @@ let report = { return queryres; } doQueries().then(result => { + console.log(result); let content = Mustache.render(data.contenthtml,result); let header = Mustache.render(data.headerhtml,result); let footer = Mustache.render(data.footerhtml,result); + console.log(report.tmpfolder + id_report + ".content.html"); var result = fs.writeFileSync(report.tmpfolder + id_report + ".content.html",content); result = fs.writeFileSync(report.tmpfolder + id_report + ".header.html", header); result = fs.writeFileSync(report.tmpfolder + id_report + ".footer.html",footer); - result = fs.writeFileSync(report.tmpfolder + id_report + ".data.js",JSON.stringify(result)); + //result = fs.writeFileSync(report.tmpfolder + id_report + ".data.js",JSON.stringify(result)); report.compile(); }); }); @@ -67,24 +75,27 @@ let report = { }, compile: function(){ let args = []; + console.log("id_report",report.id_report) + console.log("pdfoptions",report.pdfoptions); if (report.pdfoptions.bottom){ args.push("-B",report.pdfoptions.bottom + report.pdfoptions.unit); } if (report.pdfoptions.left){ args.push("-L",report.pdfoptions.left+report.pdfoptions.unit); } if (report.pdfoptions.right){ args.push("-R",report.pdfoptions.right+report.pdfoptions.unit); } if (report.pdfoptions.top){ args.push("-T",report.pdfoptions.top+report.pdfoptions.unit); } if (report.pdfoptions.orientation){ args.push("-O",report.pdfoptions.orientation); } if (report.pdfoptions.size){ args.push("-s",report.pdfoptions.size); } - if (report.pdfoptions.encoding){ args.push("--encoding" +"'"+report.pdfoptions.encoding+"'"); } + if (report.pdfoptions.encoding){ args.push("--encoding",report.pdfoptions.encoding); } if (fs.existsSync(report.tmpfolder+ report.id_report + ".header.html")){ - args.push('"' +"--header-html",report.tmpfolder+ report.id_report + ".footer.html" + '"'); + args.push("--header-html",report.tmpfolder+ report.id_report + ".header.html"); } if (fs.existsSync(report.tmpfolder+ report.id_report + ".footer.html")){ - args.push('"' +"--footer-html",report.tmpfolder+ report.id_report + ".footer.html" + '"'); + args.push("--footer-html",report.tmpfolder+ report.id_report + ".footer.html" ); } - args.push('"' +report.tmpfolder+ report.id_report + ".content.html" + '"'); - report.output = report.output.replace(/\//g,"\\"); - args.push('"' + report.output +'"'); - console.log("Output to",report.output); + args.push(report.tmpfolder+ report.id_report + ".content.html" ); + report.tmpoutput = report.tmpoutput.replace(/\\/g,"/"); + args.push(report.tmpoutput); + console.log("Output to",report.tmpoutput); console.log("AppPath",usersystem.getApplicationPath()); + console.log(args); const pdfout = spawn(usersystem.getApplicationPath()+ '/tools/wkhtmltopdf.exe', args); pdfout.stdout.on('data', (data) => { console.log(`pdfout stdout: ${data}`); diff --git a/desktopapp/js/global/sqlite.js b/desktopapp/js/global/sqlite.js index 765322e..1bc3ad0 100644 --- a/desktopapp/js/global/sqlite.js +++ b/desktopapp/js/global/sqlite.js @@ -56,7 +56,23 @@ let db = { }); }, exec: function(sql,callback){ - return db.dbh.exec(sql); + try { + return db.dbh.exec(sql); + } catch(e){ + console.log(e); + } + + }, + execAsync: function(sql){ + return new Promise((resolve, reject) => { + db.dbh.exec(`${sql}`, (err, row) => { + if (err) { + reject(err); // optional: you might choose to swallow errors. + } else { + resolve(row); // accumulate the data + } + }); + }); }, newuuid: function(){ return db.query("SELECT lower(hex( randomblob(4)) || '-' || hex( randomblob(2)) || '-' || hex( randomblob(2)) || '-' || hex( randomblob(2)) || '-' || hex(randomblob(6))) as id;"); diff --git a/desktopapp/js/modules/invoice.js b/desktopapp/js/modules/invoice.js index 4df18e3..f3ce9f2 100644 --- a/desktopapp/js/modules/invoice.js +++ b/desktopapp/js/modules/invoice.js @@ -11,7 +11,7 @@ let invoice = { console.log("ID Invoice:",id); db.query("SELECT inv.*,sum(bk.netamount) AS netamount,sum(bk.taxamount) AS vatamount,sum(bk.netamount + bk.taxamount) AS grossamount FROM invoices inv JOIN bookings bk ON (inv.id = bk.id_invoices) WHERE inv.id='"+id+"' GROUP BY inv.id;").then(data => { dataform.fillform('invoices',invoice.selects,data); - invoice.getbookingdata(); + invoice.getBookingData(); invoice.hasPDF(data.pdffile); myapp.viewpanel('invoice'); }); @@ -67,7 +67,10 @@ let invoice = { invoice.initbookings(); myapp.loaddialog("SelectAddress").then(result => { addresses.initSelector(); - }) + }); + myapp.loaddialog("SelectProduct").then(result => { + products.initSelector(); + }); //invoice.changedDirection(true); }, @@ -93,7 +96,7 @@ let invoice = { }); }, - getbookingdata: function(){ + getBookingData: function(){ db.queryarray("SELECT bookings.id, id_invoices,id_products,producttype,sku, COALESCE(bookings.quantity, 1) AS quantity, COALESCE(bookings.unitamount, 0.0) AS unitamount, unit,name,description,taxpercent,taxpercent AS vatpercent,taxamount,netamount,bookings.netamount + bookings.taxamount AS grossamount, (('' || COALESCE(name, '')) || '
') || COALESCE(description, '') AS displayitem FROM bookings where id_invoices='"+ invoice.current_id+"';").then(data => { console.log("bookingData",data); invoice.bookingtbl.setData(data); @@ -139,8 +142,7 @@ let invoice = { document.getElementById("invoices_reference").value = data[0]["setinvoicereference"]; }, addProduct: function(){ - - // req.reqdata({"get":"products","id":table.selection},invoice.setProduct); + }, setProduct: function(data){ // let idbk = document.getElementById("bookings_id"); @@ -308,7 +310,62 @@ let invoice = { myapp.viewdialog("SelectAddress"); }); }, - + addBooking:function(){ + let newbookingid = db.newuuid(); + dataform.cleanform(); + db.execAsync("INSERT INTO bookings (id,id_invoices,quantity,taxpercent) VALUES ('"+ newbookingid+"','"+ invoice.current_id +"',1,17.00);").then(bdata => { + invoice.getBookingData(); + tbl.bookingtbl.selectRow(newbookingid); + invoice.editBooking(); + }); + }, + confirmremoveBooking: function(){ + let sel = invoice.bookingtbl.getSelectedData(); + if (sel[0]){ + myapp.confirm("Buchung löschen?","Sind Sie sicher dass sie die ausgewählte(n) Buchunge(n) löschen möchten?","Löschen","Abbrechen",'invoice.removeBookings();'); + } + }, + removeBooking: function(){ + let sel = invoice.bookingtbl.getSelectedData(); + if (sel){ + var sdel = []; + for (s=0;s 0); + { + db.execAsync("delete from bookings where id in ("+ sdel.join(",") + ");") + invoice.getBookingData(); + } + } + }, + duplicateBooking: function(){ + let sel = invoice.bookingtbl.getSelectedData(); + if (sel){ + for (s=0;s { + dataform.fillform("invoicebooking",{},bdata); + myapp.viewdialog("InvoiceBooking"); + }); + } + }, + closeBookingDlg: function(){ + invoice.getBookingData(); + myapp.closeDialog("InvoiceBooking"); + + } } \ No newline at end of file diff --git a/desktopapp/js/modules/products.js b/desktopapp/js/modules/products.js index 06d376b..9a53413 100644 --- a/desktopapp/js/modules/products.js +++ b/desktopapp/js/modules/products.js @@ -3,4 +3,10 @@ let products = { viewpanel: function(){ myapp.viewpanel('products'); }, + init: function(){ + + }, + initSelector: function(){ + + } } \ No newline at end of file diff --git a/desktopapp/panels/invoice.html b/desktopapp/panels/invoice.html index ec6850d..dd510d9 100644 --- a/desktopapp/panels/invoice.html +++ b/desktopapp/panels/invoice.html @@ -10,11 +10,11 @@ "font-size: 16px;">importieren - - - - + + +
@@ -142,7 +142,7 @@ "text">
- +
diff --git a/install/createmacicon.pl b/install/createmacicon.pl deleted file mode 100644 index 05be5c5..0000000 --- a/install/createmacicon.pl +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/perl - -use strict; -use File::Basename; -use File::Copy; -use File::Path qw(make_path remove_tree); -print "Create MacOS ICON (*.icns)\n"; -my $BASEIMG= $ARGV[0]; -if ((! -e $BASEIMG) || ($BASEIMG !~ /\.png$/)){ - print "no PNG-image selected!\n"; - exit(1); -} -my $ICONSET=dirname($BASEIMG).'/appicon.iconset'; -if (-d $ICONSET) { - remove_tree($ICONSET,{keep_root => 1}); -} else { - make_path( $ICONSET); -} -copy($BASEIMG,$ICONSET."/icon_512x512.png"); -copy($BASEIMG,$ICONSET.'/icon_512x512@2x.png'); -copy($ICONSET.'/icon_512x512.png',$ICONSET.'/icon_256x256@2x.png'); -system('sips -s format png -Z 256 "'.$BASEIMG.'" --out "'.$ICONSET.'/icon_256x256.png"'); -copy($ICONSET.'/icon_256x256.png',$ICONSET.'/icon_128x128@2x.png'); -system('sips -s format png -Z 128 "'.$BASEIMG.'" --out "'.$ICONSET.'/icon_128x128.png"'); -system('sips -s format png -Z 64 "'.$BASEIMG.'" --out "'.$ICONSET.'/icon_32x32@2x.png"'); -system('sips -s format png -Z 32 "'.$BASEIMG.'" --out "'.$ICONSET.'/icon_32x32.png"'); -copy($ICONSET.'/icon_32x32.png',$ICONSET.'/icon_16x16@2x.png'); -system('sips -s format png -Z 16 "'.$BASEIMG.'" --out "'.$ICONSET.'/icon_16x16.png"'); -system('iconutil -c icns -o "'.dirname($BASEIMG).'/'.substr(basename($BASEIMG),0,-4).'.icns" "'.$ICONSET.'"'); -system('rm -r "'.$ICONSET.'"'); \ No newline at end of file diff --git a/install/createmacicon.sh b/install/createmacicon.sh new file mode 100644 index 0000000..bea5801 --- /dev/null +++ b/install/createmacicon.sh @@ -0,0 +1,33 @@ +#!/bin/bash + + +echo "Create MacOS ICON (*.icns)"; +BASEIMG=$1; +if [ ! -z "${BASEIMG}" ] +then + echo "no PNG-image selected!"; +fi +} +BASEDIR=`dirname ${BASEIMG}` +ICONSET=$BASEDIR"/appicon.iconset" +if [ -d $ICONSET ] +then + rm -r "${ICONSET}" +fi +mkdir "$ICONSET" + +cp $BASEIMG $ICONSET"/icon_512x512.png" +cp $BASEIMG $ICONSET"/icon_512x512@2x.png" +cp $ICONSET"/icon_512x512.png" $ICONSET"/icon_256x256@2x.png" +sips -s format png -Z 256 "$BASEIMG" --out "$ICONSET/icon_256x256.png" +cp $ICONSET"/icon_256x256.png" $ICONSET"/icon_128x128@2x.png" +sips -s format png -Z 128 "$BASEIMG" --out "$ICONSET/icon_128x128.png" +sips -s format png -Z 64 "$BASEIMG" --out "$ICONSET/icon_32x32@2x.png" +cp $ICONSET"/icon_32x32.png" $ICONSET/icon_16x16@2x.png +sips -s format png -Z 16 "$BASEIMG" --out "$ICONSET/icon_16x16.png" +IMGNAME=`basename ${BASEIMG}` +NLEN=${#BASEIMG} +NLEN=${NLEN}-4 +IMGNAME=${BASEIMG,0,${NLEN}} +iconutil -c icns -o "$BASEDIR/${IMGNAME}.icns" "$ICONSET" +rm -r "$ICONSET" \ No newline at end of file diff --git a/install/macos_dmg.sh b/install/macos_dmg.sh index fdcdeb0..d52d8ff 100644 --- a/install/macos_dmg.sh +++ b/install/macos_dmg.sh @@ -1,51 +1,42 @@ #!/bin/bash - -use strict; -use File::Copy; -#use File::Copy::Recursive qw(rcopy); -#use Getopt::Long; -use File::Basename; -use FindBin qw($Bin); - -# my $setup = ""; -REPPATH=${CMDPATH}; - -chdir($reppath.'/desktopapp'); -system('npm run package-macos'); -print "Move some Files\n"; -move($reppath."/release-builds/pot-darwin-x64/LICENSE",$reppath."/release-builds/pot-darwin-x64/pot.app/Contents/Resources/LICENSE"); -move($reppath."/release-builds/pot-darwin-x64/LICENSES.chromium.html",$reppath."/release-builds/pot-darwin-x64/pot.app/Contents/Resources/LICENSES.chromium.html"); -move($reppath."/release-builds/pot-darwin-x64/version",$reppath."/release-builds/pot-darwin-x64/pot.app/Contents/Resources/version"); - - -print "Sign App-Files\n"; -my @frm = ($reppath."/release-builds/pot-darwin-x64/pot.app/Contents/Frameworks/Electron Framework.framework/Versions/Current/Helpers/chrome_crashpad_handler", - $reppath."/release-builds/pot-darwin-x64/pot.app/Contents/Frameworks/Electron Framework.framework", -$reppath."/release-builds/pot-darwin-x64/pot.app/Contents/Frameworks/Mantle.framework", -$reppath."/release-builds/pot-darwin-x64/pot.app/Contents/Frameworks/ReactiveCocoa.framework", -$reppath."/release-builds/pot-darwin-x64/pot.app/Contents/Frameworks/Squirrel.framework", -$reppath."/release-builds/pot-darwin-x64/pot.app/Contents/Frameworks/pot Helper (GPU).app", -$reppath."/release-builds/pot-darwin-x64/pot.app/Contents/Frameworks/pot Helper (Plugin).app", -$reppath."/release-builds/pot-darwin-x64/pot.app/Contents/Frameworks/pot Helper (Renderer).app", -$reppath."/release-builds/pot-darwin-x64/pot.app/Contents/Frameworks/pot Helper.app", -$reppath.'/release-builds/pot-darwin-x64/pot.app/Contents/MacOS/pot', -$reppath.'/release-builds/pot-darwin-x64/pot.app' - -); -foreach my $fr (@frm){ - my $cmd = 'codesign -s "Developer ID Application: DKS sarl" -fv --ignore-resources "'.$fr.'"'; - my $r = `$cmd`; - print $r; -} - -print "Create DMG now\n"; -if (! -d $reppath.'/website/downloads'){ - make_path($reppath.'/website/downloads'); -} -if (-e $reppath.'/website/downloads/POT_Setup.dmg'){ - unlink($reppath.'/website/downloads/POT_Setup.dmg'); -} -system('perl "'.$reppath.'/install/macos/pkg-dmg" --sourcefile --source "'.$reppath.'/release-builds/pot-darwin-x64/pot.app" --target "'.$reppath.'/website/downloads/pot_setup.dmg" --volname "POT_Setup" --symlink /Applications:"installer ici"'); -print "DMG created: ".$reppath.'/website/downloads/POT_Setup.dmg'."\n"; -print localtime()." Normal End!\n"; +CALLDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +APPNAME='invoicejournal' +REPPATH=`dirname ${CALLDIR}` + +cd $REPPATH'/desktopapp' +npm run package-macos +echo "Move some Files" +mv $REPPATH"/release-builds/${APPNAME}-darwin-x64/LICENSE" $REPPATH"/release-builds/${APPNAME}-darwin-x64/${APPNAME}.app/Contents/Resources/LICENSE" +move($REPPATH"/release-builds/${APPNAME}-darwin-x64/LICENSES.chromium.html" $REPPATH"/release-builds/${APPNAME}-darwin-x64/${APPNAME}.app/Contents/Resources/LICENSES.chromium.html" +move($REPPATH"/release-builds/${APPNAME}-darwin-x64/version" $REPPATH"/release-builds/${APPNAME}-darwin-x64/${APPNAME}.app/Contents/Resources/version" + + +echo "Sign App-Files" +CMD='codesign -s "Developer ID Application: DKS sarl" -fv --ignore-resources' +$CMD $REPPATH"/release-builds/${APPNAME}-darwin-x64/${APPNAME}.app/Contents/Frameworks/Electron Framework.framework/Versions/Current/Helpers/chrome_crashpad_handler" +$CMD $REPPATH"/release-builds/${APPNAME}-darwin-x64/${APPNAME}.app/Contents/Frameworks/Electron Framework.framework" +$CMD $REPPATH"/release-builds/${APPNAME}-darwin-x64/${APPNAME}.app/Contents/Frameworks/Mantle.framework" +$CMD $REPPATH"/release-builds/${APPNAME}-darwin-x64/${APPNAME}.app/Contents/Frameworks/ReactiveCocoa.framework" +$CMD $REPPATH"/release-builds/${APPNAME}-darwin-x64/${APPNAME}.app/Contents/Frameworks/Squirrel.framework" +$CMD $REPPATH"/release-builds/${APPNAME}-darwin-x64/${APPNAME}.app/Contents/Frameworks/${APPNAME} Helper (GPU).app" +$CMD $REPPATH"/release-builds/${APPNAME}-darwin-x64/${APPNAME}.app/Contents/Frameworks/${APPNAME} Helper (Plugin).app" +$CMD $REPPATH"/release-builds/${APPNAME}-darwin-x64/${APPNAME}.app/Contents/Frameworks/${APPNAME} Helper (Renderer).app" +$CMD $REPPATH"/release-builds/${APPNAME}-darwin-x64/${APPNAME}.app/Contents/Frameworks/${APPNAME} Helper.app" +$CMD $REPPATH"/release-builds/${APPNAME}-darwin-x64/${APPNAME}.app/Contents/MacOS/"${APPNAME} +$CMD $REPPATH"/release-builds/${APPNAME}-darwin-x64/${APPNAME}.app" + + +echo "Create DMG now"; +if [ ! -d $REPPATH"/release" ] +then + mkdir $REPPATH"/release" +fi +if [ -e $REPPATH"/RELEASE(${APPNAME}_Setup.dmg" ] +then + rm $REPPATH"/release/"${APPNAME}"_Setup.dmg" +fi +# instead of perl maybe we use in future https://github.com/create-dmg/create-dmg +perl "$REPPATH/install/macos/pkg-dmg" --sourcefile --source "$REPPATH/release-builds/${APPNAME}-darwin-x64/${APPNAME}.app" --target "$REPPATH/website/downloads/${APPNAME}_setup.dmg" --volname "${APPNAME}_Setup" --symlink /Applications:"installer ici" +echo "DMG created: $REPPATH/release/"${APPNAME}"_Setup.dmg" +echo " Normal End!"; -- 2.39.5