#include <iostream> #include <fstream> #include <string> #include <vector> #include <filesystem> #include <cstdlib> #include <chrono> bool checkFilesExist(std::string texFileName, std::string csvFileName, std::string prodSheetPdfName){ bool oneFileExists = false; if(std::filesystem::exists(texFileName)){ std::cerr << "ERROR - " << texFileName << " already exists" << std::endl; oneFileExists = true; } if (std::filesystem::exists(csvFileName)){ std::cerr << "ERROR - " << csvFileName << " already exists" << std::endl; oneFileExists = true; } if (std::filesystem::exists(prodSheetPdfName)){ std::cerr << "ERROR - " << prodSheetPdfName << " already exists" << std::endl; oneFileExists = true; } return oneFileExists; } bool makeTexFile(std::vector<std::string> serialList, std::string texFileName){ std::fstream serialTexFile; serialTexFile.open(texFileName, std::fstream::out); if(serialTexFile.is_open()){ serialTexFile << "\\newcommand{\\serialZeroR}{" << serialList[0] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialZeroB}{" << serialList[8] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialOneR}{" << serialList[1] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialOneB}{" << serialList[9] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialTwoR}{" << serialList[16] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialTwoB}{" << serialList[24] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialThreeR}{" << serialList[17] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialThreeB}{" << serialList[25] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialFourR}{" << serialList[2] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialFourB}{" << serialList[10] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialFiveR}{" << serialList[3] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialFiveB}{" << serialList[11] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialSixR}{" << serialList[18] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialSixB}{" << serialList[26] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialSevenR}{" << serialList[19] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialSevenB}{" << serialList[27] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialEightR}{" << serialList[4] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialEightB}{" << serialList[12] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialNineR}{" << serialList[5] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialNineB}{" << serialList[13] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialAR}{" << serialList[20] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialAB}{" << serialList[28] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialBR}{" << serialList[21] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialBB}{" << serialList[29] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialCR}{" << serialList[6] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialCB}{" << serialList[14] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialDR}{" << serialList[7] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialDB}{" << serialList[15] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialER}{" << serialList[22] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialEB}{" << serialList[30] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialFR}{" << serialList[23] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialFB}{" << serialList[31] << "}" << std::endl; /* serialTexFile << "\\newcommand{\\serialZeroR}{" << serialList[0] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialZeroB}{" << serialList[1] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialOneR}{" << serialList[2] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialOneB}{" << serialList[3] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialTwoR}{" << serialList[4] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialTwoB}{" << serialList[5] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialThreeR}{" << serialList[6] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialThreeB}{" << serialList[7] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialFourR}{" << serialList[8] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialFourB}{" << serialList[9] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialFiveR}{" << serialList[10] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialFiveB}{" << serialList[11] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialSixR}{" << serialList[12] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialSixB}{" << serialList[13] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialSevenR}{" << serialList[14] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialSevenB}{" << serialList[15] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialEightR}{" << serialList[16] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialEightB}{" << serialList[17] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialNineR}{" << serialList[18] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialNineB}{" << serialList[19] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialAR}{" << serialList[20] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialAB}{" << serialList[21] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialBR}{" << serialList[22] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialBB}{" << serialList[23] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialCR}{" << serialList[24] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialCB}{" << serialList[25] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialDR}{" << serialList[26] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialDB}{" << serialList[27] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialEB}{" << serialList[29] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialER}{" << serialList[28] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialFR}{" << serialList[30] << "}" << std::endl; serialTexFile << "\\newcommand{\\serialFB}{" << serialList[31] << "}" << std::endl; */ } else { std::cerr << "ERROR - couldnt open tex-file" << std::endl; return false; } return true; } bool makeCsvFile(std::vector<std::string> serialList, std::string csvFileName){ std::fstream serialCsvFile; serialCsvFile.open(csvFileName, std::fstream::out); if(serialCsvFile.is_open()){ serialCsvFile << serialList[0] << " " << serialList[8] << std::endl; serialCsvFile << serialList[1] << " " << serialList[9] << std::endl; serialCsvFile << serialList[16] << " " << serialList[24] << std::endl; serialCsvFile << serialList[17] << " " << serialList[25] << std::endl; serialCsvFile << serialList[2] << " " << serialList[10] << std::endl; serialCsvFile << serialList[3] << " " << serialList[11] << std::endl; serialCsvFile << serialList[18] << " " << serialList[26] << std::endl; serialCsvFile << serialList[19] << " " << serialList[27] << std::endl; serialCsvFile << serialList[4] << " " << serialList[12] << std::endl; serialCsvFile << serialList[5] << " " << serialList[13] << std::endl; serialCsvFile << serialList[20] << " " << serialList[28] << std::endl; serialCsvFile << serialList[21] << " " << serialList[29] << std::endl; serialCsvFile << serialList[6] << " " << serialList[14] << std::endl; serialCsvFile << serialList[7] << " " << serialList[15] << std::endl; serialCsvFile << serialList[22] << " " << serialList[30] << std::endl; serialCsvFile << serialList[23] << " " << serialList[31] << std::endl; /* for (int i=0; i < serialList.size()-1; i+=2){ serialCsvFile << serialList[i] << " " << serialList[i+1] << std::endl; } */ } else { std::cerr << "ERROR - couldnt open csv-file" << std::endl; return false; } return true; } bool makePdfFile(std::string prodSheetPdfName){ //std::system("cp /home/orestis/Dokumente/Laufzettel/headerProductionSheet.tex ."); std::system("cp /home/tau/oafedulidis/APDStuff/makeProdSheet/tex/headerProductionSheet.tex ."); //std::system("cp /home/orestis/Dokumente/Laufzettel/productionSheet.tex ."); std::system("cp /home/tau/oafedulidis/APDStuff/makeProdSheet/tex/productionSheet.tex ."); std::system("pdflatex productionSheet.tex > /dev/null"); if(std::filesystem::exists(prodSheetPdfName)){ std::system("rm productionSheet.log productionSheet.aux productionSheet.tex serialsAssigned.tex headerProductionSheet.tex"); return true; } else { return false; } } int main(){ std::string serialFileName = "serials.dat"; std::string csvFileName = "apd_assignments_on_alveole.csv"; std::string texFileName = "serialsAssigned.tex"; std::string prodSheetPdfName = "productionSheet.pdf"; std::string lineBuffer; std::vector<std::string> serialList; serialList.clear(); std::fstream serialFile; serialFile.open(serialFileName, std::fstream::in); if(serialFile.is_open()){ while(std::getline(serialFile, lineBuffer)){ if(lineBuffer.size() == 9) lineBuffer = "0" + lineBuffer; if(lineBuffer.size() == 10) serialList.push_back(lineBuffer); } serialFile.close(); } else { std::cerr << "ERROR - could not open File: " << serialFileName << std::endl; return 1; } if(serialList.size() == 32){ std::cout << "found " << serialList.size() << " serials" << std::endl; std::cout << "creating tex-file for production sheet" << std::endl; std::cout << "creating csv-file for APD serials where Crystals and Barcodes needs to be added" << std::endl; if(!checkFilesExist(texFileName, csvFileName, prodSheetPdfName)){ if(!makeTexFile(serialList, texFileName)) return 1; if(!makeCsvFile(serialList, csvFileName)) return 1; } else { return 1; } } else { std::cerr << "ERROR - unexpected amount of serials, expected 32 but got " << serialList.size(); return 1; } std::cout << "serialsAssigned.tex and apd_assignments_on_alveole.csv created" << std::endl; std::cout << "know executing pdflatex to compile productionSheet.pdf" << std::endl; if(makePdfFile(prodSheetPdfName)){ std::cout << "productionSheet.pdf created and cleared output" << std::endl; } else { std::cout << "could not create productionSheet.pdf" << std::endl; return 1; } return 0; }