diff -r 6bab9440aeb9 -r 14d79ec33db4 src/EditProductExport.cpp --- a/src/EditProductExport.cpp Mon Jun 06 20:19:27 2022 +0200 +++ b/src/EditProductExport.cpp Mon Jun 06 21:56:21 2022 +0200 @@ -271,6 +271,75 @@ } +void EditProduct::copyProduct() +{ + Product *dup = new Product; + + dup = product; + dup->record = -1; + dup->uuid = ""; + dup->name.append(" [duplicate]"); + dup->code.append("-[dup]"); + /* + * Clear data of a previous brew if present and roll back stages. + * But leave all ingredients and volumes, that's what we want. + */ + if (dup->stage > PROD_STAGE_WAIT) { + dup->stage = dup->inventory_reduced = PROD_STAGE_WAIT; + } + dup->birth = QDate::currentDate(); + dup->brew_date_start = dup->brew_date_end = QDateTime(); + dup->brew_mash_ph = dup->brew_mash_sg = dup->brew_mash_efficiency = 0; + dup->brew_sparge_ph = 0; + dup->brew_preboil_volume = dup->brew_preboil_sg = dup->brew_preboil_ph = dup->brew_preboil_efficiency = 0; + dup->brew_aboil_volume = dup->brew_aboil_sg = dup->brew_aboil_ph = dup->brew_aboil_efficiency = 0; + dup->brew_cooling_time = 0; + dup->brew_fermenter_volume = 0; + dup->brew_fermenter_sg = dup->brew_fermenter_ibu = dup->brew_fermenter_color = 0; + dup->og = dup->fg = 0; + dup->primary_start_temp = dup->primary_max_temp = dup->primary_end_temp = dup->primary_end_sg = 0; + dup->primary_end_date = dup->secondary_end_date = QDate(); + dup->secondary_temp = dup->secondary_end_sg = dup->tertiary_temp = 0; + dup->package_date = QDate(); + dup->package_volume = dup->package_abv = dup->package_ph = 0; + dup->bottle_amount = dup->bottle_carbonation = dup->bottle_priming_amount = dup->bottle_carbonation_temp = 0; + dup->keg_amount = dup->keg_carbonation = dup->keg_priming_amount = dup->keg_carbonation_temp = 0; + dup->bottle_priming_water = dup->keg_priming_water = 0; + dup->taste_rate = 0; + dup->taste_date = QDate(); + dup->taste_notes = dup->taste_color = dup->taste_transparency = dup->taste_head = ""; + dup->taste_aroma = dup->taste_taste = dup->taste_mouthfeel = dup->taste_aftertaste = ""; + dup->starter_viability = 100; + dup->yeast_prod_date = QDate(); + dup->divide_type = dup->divide_parts = dup->divide_part = 0; + dup->divide_size = 0; + dup->divide_factor = 1; + + qDebug() << dup->record << dup->name; + if (DB_product::save(dup, this)) { + QMessageBox::information(this, tr("Copy Product"), tr("Copy Product export ready.")); + } else { + QMessageBox::warning(this, tr("Copy Product "), tr("Copy Product error.")); + } + delete dup; +} + + +void EditProduct::copyRecipe() +{ +} + + +void EditProduct::toforumProduct() +{ +} + + +void EditProduct::splitProduct() +{ +} + + void EditProduct::on_exportButton_clicked() { QDialog* dialog = new QDialog(this); @@ -287,11 +356,11 @@ beerxmlButton->setObjectName(QString::fromUtf8("beerxmlButton")); beerxmlButton->setGeometry(QRect(50, 20, 171, 21)); beerxmlButton->setText(tr("Export to beerXML")); -/* QRadioButton *copy_productButton = new QRadioButton(dialog); + QRadioButton *copy_productButton = new QRadioButton(dialog); copy_productButton->setObjectName(QString::fromUtf8("copy_productButton")); copy_productButton->setGeometry(QRect(50, 50, 171, 21)); copy_productButton->setText(tr("Copy to product")); - QRadioButton *splitButton = new QRadioButton(dialog); +/* QRadioButton *splitButton = new QRadioButton(dialog); splitButton->setObjectName(QString::fromUtf8("splitButton")); splitButton->setGeometry(QRect(50, 110, 171, 21)); splitButton->setText(tr("Split this batch")); @@ -312,6 +381,8 @@ if (dialog->result() == QDialog::Accepted) { if (beerxmlButton->isChecked()) exportBeerXML(); + if (copy_productButton->isChecked()) + copyProduct(); } disconnect(buttonBox, nullptr, nullptr, nullptr);