src/global.h

Thu, 28 Apr 2022 22:49:13 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Thu, 28 Apr 2022 22:49:13 +0200
changeset 175
f1ed3a2a94e9
parent 173
8514932b61aa
child 176
69a033e099a2
permissions
-rw-r--r--

Initial import of EditProduct, the part from EditRecipe is ported.

#ifndef	_GLOBAL_H
#define	_GLOBAL_H

#include <QList>
#include <QString>
#include <QTranslator>
#include <QDate>


#define Ka1		0.0000004445
#define Ka2		0.0000000000468

#define MMCa		40.048
#define MMMg		24.305
#define MMNa		22.98976928
#define MMCl		35.453
#define MMSO4		96.0626
#define MMCO3		60.01684
#define MMHCO3		61.01684
#define MMCaSO4		172.171
#define MMCaCl2		147.015
#define MMCaCO3		100.087
#define MMMgCl2		95.211		/* Since 27-06-2021 */
#define MMMgSO4		246.475
#define MMNaHCO3	84.007
#define MMNa2CO3	105.996
#define MMNaCl		58.443
#define MMCaOH2		74.06268

#define SpecificHeatWater	1.0
#define SpecificHeatMalt	0.399	//cal/g.°C
#define SlakingHeat		10.318	//cal/g.°C
#define equip_tun_weight	2.0	// 2 Kg pot
#define equip_tun_specific_heat	0.110


struct Acid
{
    QString     name_en;
    QString	name_nl;
    double      pK1;
    double      pK2;
    double      pK3;
    double      MolWt;
    double      AcidSG;
    double      AcidPrc;
};

extern QList<Acid>	my_acids;

/*
 * Fermentables, Hops, Miscs, Yeasts and Mashs are stored in the
 * database in json arrays. These are the QList structures.
 */
struct Fermentables
{
    QString	f_name;
    QString	f_origin;
    QString	f_supplier;
    double	f_amount;
    double	f_cost;
    int		f_type;
    double	f_yield;
    double	f_color;
    double	f_coarse_fine_diff;
    double	f_moisture;
    double	f_diastatic_power;
    double	f_protein;
    double	f_dissolved_protein;
    double	f_max_in_batch;
    int		f_graintype;
    int		f_added;
    bool	f_recommend_mash;
    bool	f_add_after_boil;
    bool	f_adjust_to_total_100;
    double	f_percentage;
    double	f_di_ph;
    double	f_acid_to_ph_57;
    double	f_inventory;		///< In product, current inventory.
    bool	f_avail;		///< Product available in database.
};


struct Hops
{
    QString	h_name;
    QString	h_origin;
    double	h_amount;
    double	h_cost;
    int		h_type;
    int		h_form;
    int		h_useat;
    double	h_time;
    double	h_alpha;
    double	h_beta;
    double	h_hsi;
    double	h_humulene;
    double	h_caryophyllene;
    double	h_cohumulone;
    double	h_myrcene;
    double	h_total_oil;
    double	h_inventory;		///< In product, current inventory.
    bool	h_avail;		///< Product available in database.
};


struct Miscs
{
    QString	m_name;
    double	m_amount;
    int		m_type;
    int		m_use_use;
    double	m_time;
    bool	m_amount_is_weight;
    double	m_cost;
    double	m_inventory;		///< In product, current inventory.
    bool	m_avail;		///< Product available in database.
};


struct Yeasts
{
    QString	y_name;
    QString	y_laboratory;
    QString	y_product_id;
    double	y_amount;
    int		y_type;
    int		y_form;
    double	y_min_temperature;
    double	y_max_temperature;
    int		y_flocculation;
    double	y_attenuation;
    double	y_cells;
    double	y_tolerance;
    int		y_use;
    bool	y_sta1;
    bool	y_bacteria;
    bool	y_harvest_top;
    int		y_harvest_time;
    double	y_pitch_temperature;
    bool	y_pofpos;
    int		y_zymocide;
    int		y_gr_hl_lo;
    double	y_sg_lo;
    int		y_gr_hl_hi;
    double	y_sg_hi;
    double	y_cost;
    double	y_inventory;		///< In product, current inventory.
    bool	y_avail;		///< Product available in database.
};


struct Mashs
{
    QString	step_name;
    int		step_type;
    double	step_volume;		///< The water volume upto this step.
    double	step_infuse_amount;	///< Infuse/decoction volume this step.
    double	step_infuse_temp;	///< Infuse/decoction temperature.
    double	step_temp;		///< Start tmperature this step.
    double	step_time;		///< Step rest time.
    double	ramp_time;		///< Estimated ramp time to this step.
    double	end_temp;		///< End temperature this step.
    double	step_wg_ratio;		///< Current water/grain ratio.
    double	step_ph;		///< In product, measured pH.
    double	step_sg;		///< In product, measured SG.
};


/*
 * The main recipe record stored in the database.
 */
struct Recipe
{
    int		record;
    QString	uuid;
    bool	locked;
    QString	st_name;
    QString	st_letter;
    QString	st_guide;
    QString	st_category;
    int		st_category_number;
    int		st_type;
    double	st_og_min;
    double	st_og_max;
    double	st_fg_min;
    double	st_fg_max;
    double	st_ibu_min;
    double	st_ibu_max;
    double	st_color_min;
    double	st_color_max;
    double	st_carb_min;
    double	st_carb_max;
    double	st_abv_min;
    double	st_abv_max;

    QString	name;
    QString	notes;
    int		type;
    double	batch_size;
    double	boil_size;
    double	boil_time;
    double	efficiency;
    double	est_og;
    double	est_fg;
    double	est_abv;
    double	est_color;
    int		color_method;
    double	est_ibu;
    int		ibu_method;
    double	est_carb;

    double	sparge_temp;
    double	sparge_ph;
    double	sparge_volume;
    int		sparge_source;
    int		sparge_acid_type;
    double	sparge_acid_perc;
    double	sparge_acid_amount;
    double	mash_ph;
    QString	mash_name;
    bool	calc_acid;

    QString	w1_name;			///< Water source 1
    double	w1_amount;
    double	w1_calcium;
    double	w1_sulfate;
    double	w1_chloride;
    double	w1_sodium;
    double	w1_magnesium;
    double	w1_total_alkalinity;
    double	w1_ph;
    double	w1_cost;
    QString     w2_name;			///< Water source 2
    double      w2_amount;
    double      w2_calcium;
    double      w2_sulfate;
    double      w2_chloride;
    double      w2_sodium;
    double      w2_magnesium;
    double      w2_total_alkalinity;
    double      w2_ph;
    double      w2_cost;
    double      wg_amount;			///< Mixed water
    double      wg_calcium;
    double      wg_sulfate;
    double      wg_chloride;
    double      wg_sodium;
    double      wg_magnesium;
    double      wg_total_alkalinity;
    double      wg_ph;
    double      wb_calcium;			///< Treated water
    double      wb_sulfate;
    double      wb_chloride;
    double      wb_sodium;
    double      wb_magnesium;
    double      wb_total_alkalinity;
    double      wb_ph;
    int		wa_acid_name;
    double	wa_acid_perc;
    int		wa_base_name;

    QList<Fermentables>	fermentables;
    QList<Hops>		hops;
    QList<Miscs>	miscs;
    QList<Yeasts>	yeasts;
    QList<Mashs>	mashs;

    /*
     * These are not in the MySL database, but are global variables
     * that belong with the loaded recipe data and are present to
     * make things easier.
     */
    int		fermentables_row;	///< Current row, -1 is invalid.
    bool	fermentables_use100;	///< Use percentages instead of amount
    int		hops_row;
    int		miscs_row;
    int		yeasts_row;
    int		mashs_row;
    double	mashs_kg;		///< Kg fermentables in the mash.
    int		mashs_time;		///< Total mash time.
    double	preboil_sg;
};


/*
 * The main product record stored in the database.
 */
struct Product
{
    int		record;
    QString	uuid;
    QString	name;
    QString	code;
    QDate	birth;
    int		stage;
    QString     notes;
    bool	log_brew;
    bool	log_fermentation;
    bool	log_ispindel;
    bool	log_co2pressure;
    int		inventory_reduced;
    bool	locked;

    QString	eq_name;
    QString	eq_notes;
    double	eq_boil_size;
    double	eq_batch_size;
    double	eq_tun_volume;
    double	eq_tun_weight;
    double	eq_tun_specific_heat;
    int		eq_tun_material;
    double	eq_tun_height;
    double	eq_top_up_water;
    double	eq_trub_chiller_loss;
    double	eq_evap_rate;
    double	eq_boil_time;
    bool	eq_calc_boil_volume;
    double	eq_top_up_kettle;
    double	eq_hop_utilization;
    double	eq_lauter_volume;
    double	eq_lauter_height;
    double	eq_lauter_deadspace;
    double	eq_kettle_volume;
    double	eq_kettle_height;
    double	eq_mash_volume;
    double	eq_mash_max;
    double	eq_efficiency;

    QDateTime	brew_date_start;
    double	brew_mash_ph;
    double	brew_mash_sg;
    double	brew_mash_efficiency;
    double	brew_sparge_temperature;
    double	brew_sparge_volume;
    double	brew_sparge_est;
    double	brew_sparge_ph;
    double	brew_preboil_volume;
    double	brew_preboil_sg;
    double	brew_preboil_ph;
    double	brew_preboil_efficiency;
    double	brew_aboil_volume;
    double	brew_aboil_sg;
    double	brew_aboil_ph;
    double	brew_aboil_efficiency;
    int		brew_cooling_method;
    double	brew_cooling_time;
    double	brew_cooling_to;
    double	brew_whirlpool9;
    double	brew_whirlpool7;
    double	brew_whirlpool6;
    double	brew_whirlpool2;
    double	brew_fermenter_volume;
    double	brew_fermenter_extrawater;
    double	brew_fermenter_tcloss;
    double	brew_aeration_time;
    double	brew_aeration_speed;
    int		brew_aeration_type;
    double	brew_fermenter_sg;
    double	brew_fermenter_ibu;
    double	brew_fermenter_color;
    QDateTime	brew_date_end;

    double	og;
    double	fg;
    double	primary_start_temp;
    double	primary_max_temp;
    double	primary_end_temp;
    double	primary_end_sg;
    QDate	primary_end_date;
    double	secondary_temp;
    double	secondary_end_sg;
    QDate	secondary_end_date;
    double	tertiary_temp;

    QDate	package_date;
    double	package_volume;
    double	package_infuse_amount;
    double	package_infuse_abv;
    QString	package_infuse_notes;
    double	package_abv;
    double	package_ph;
    double	bottle_amount;
    double	bottle_carbonation;
    int		bottle_priming_sugar;
    double	bottle_priming_amount;
    double	bottle_priming_water;
    double	bottle_carbonation_temp;
    double	keg_amount;
    double	keg_carbonation;
    int		keg_priming_sugar;
    double	keg_priming_amount;
    double	keg_priming_water;
    double	keg_carbonation_temp;
    bool	keg_forced_carb;
    double	keg_pressure;

    QString	taste_notes;
    double	taste_rate;
    QDate	taste_date;
    QString	taste_color;
    QString	taste_transparency;
    QString	taste_head;
    QString	taste_aroma;
    QString	taste_taste;
    QString	taste_mouthfeel;
    QString	taste_aftertaste;

    QString	st_name;
    QString	st_letter;
    QString	st_guide;
    QString	st_category;
    int		st_category_number;
    int		st_type;
    double	st_og_min;
    double	st_og_max;
    double	st_fg_min;
    double	st_fg_max;
    double	st_ibu_min;
    double	st_ibu_max;
    double	st_color_min;
    double	st_color_max;
    double	st_carb_min;
    double	st_carb_max;
    double	st_abv_min;
    double	st_abv_max;

    int		type;
    double	batch_size;
    double	boil_size;
    double	boil_time;
    double	efficiency;
    double	est_og;
    double	est_og3;
    double	est_fg;
    double	est_abv;
    double	est_color;
    int		color_method;
    double	est_ibu;
    int		ibu_method;
    double	est_carb;

    double	sparge_temp;
    double	sparge_ph;
    double	sparge_volume;
    int		sparge_source;
    int		sparge_acid_type;
    double	sparge_acid_perc;
    double	sparge_acid_amount;
    double	mash_ph;
    QString	mash_name;
    bool	calc_acid;

    QString	w1_name;			///< Water source 1
    double	w1_amount;
    double	w1_calcium;
    double	w1_sulfate;
    double	w1_chloride;
    double	w1_sodium;
    double	w1_magnesium;
    double	w1_total_alkalinity;
    double	w1_ph;
    double	w1_cost;
    QString     w2_name;			///< Water source 2
    double      w2_amount;
    double      w2_calcium;
    double      w2_sulfate;
    double      w2_chloride;
    double      w2_sodium;
    double      w2_magnesium;
    double      w2_total_alkalinity;
    double      w2_ph;
    double      w2_cost;
    double      wg_amount;			///< Mixed water
    double      wg_calcium;
    double      wg_sulfate;
    double      wg_chloride;
    double      wg_sodium;
    double      wg_magnesium;
    double      wg_total_alkalinity;
    double      wg_ph;
    double      wb_calcium;			///< Treated water
    double      wb_sulfate;
    double      wb_chloride;
    double      wb_sodium;
    double      wb_magnesium;
    double      wb_total_alkalinity;
    double      wb_ph;
    int		wa_acid_name;
    double	wa_acid_perc;
    int		wa_base_name;

    bool	starter_enable;
    int		starter_type;
    double	starter_sg;
    int		starter_viability;
    QDate	yeast_prod_date;
    double	yeast_pitchrate;
    int		prop1_type;
    double	prop1_volume;
    int         prop2_type;
    double      prop2_volume;
    int         prop3_type;
    double      prop3_volume;
    int         prop4_type;
    double      prop4_volume;

    int		divide_type;
    double	divide_size;
    double	divide_factor;
    int		divide_parts;
    int		divide_part;

    QList<Fermentables>	fermentables;
    QList<Hops>		hops;
    QList<Miscs>	miscs;
    QList<Yeasts>	yeasts;
    QList<Mashs>	mashs;

    /*
     * These are not in the MySL database, but are global variables
     * that belong with the loaded product data and are present to
     * make things easier.
     */
    int		fermentables_row;	///< Current row, -1 is invalid.
    bool	fermentables_use100;	///< Use percentages instead of amount
    int		hops_row;
    int		miscs_row;
    int		yeasts_row;
    int		mashs_row;
    double	mashs_kg;		///< Kg fermentables in the mash.
    int		mashs_time;		///< Total mash time.
    double	preboil_sg;
};


extern Recipe		*recipe;
extern Product		*product;

extern QString		my_brewery_name;
extern QByteArray	my_logoByteArray;
extern int		my_factor_mashhop;
extern int		my_factor_fwh;
extern int		my_factor_pellet;
extern int		my_factor_plug;
extern int		my_factor_wethop;
extern int		my_factor_cryohop;
extern int		my_ibu_method;
extern int		my_color_method;
extern double		my_brix_correction;
extern double		my_grain_absorbtion;
extern int		my_default_water;
extern QString		my_yeastlab;

enum ProdStages {
	PROD_STAGE_PLAN,
	PROD_STAGE_WAIT,
	PROD_STAGE_BREW,
	PROD_STAGE_PRIMARY,
	PROD_STAGE_SECONDARY,
	PROD_STAGE_TERTIARY,
	PROD_STAGE_PACKAGE,
	PROD_STAGE_CARBONATION,
	PROD_STAGE_MATURE,
	PROD_STAGE_TASTE,
	PROD_STAGE_READY,
	PROD_STAGE_CLOSED
};

extern const QStringList prod_stages;
extern const QStringList prod_split;
extern const QStringList recipe_types;
extern const QStringList style_types;
extern const QStringList fermentable_types;
extern const QStringList fermentable_graintypes;
extern const QStringList fermentable_added;
extern const QStringList hop_types;
extern const QStringList hop_forms;
extern const QStringList hop_useat;
extern const QStringList misc_types;
extern const QStringList misc_uses;
extern const QStringList yeast_types;
extern const QStringList yeast_forms;
extern const QStringList yeast_use;
extern const QStringList starters;
extern const QStringList step_types;

#endif

mercurial