Skip to content
Snippets Groups Projects
makeProdSheet.cpp 10.7 KiB
Newer Older
Jan Reher's avatar
Jan Reher committed
#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;
}