In the first post in this series we looked at creating a WeightRecord. Today, we are going to look at adding TrainingProgrammes and TrainingRecords. First, however, we are going to tidy up the WeightRecord from last time and implement a suggestion from Chris Royle, to add BMI to the class.
So once we’ve added BMI and take input of height in metres and weight in kilos, our class now looks like this:
using System;
using DevExpress.Xpo;
using DevExpress.Persistent.Base;
using DevExpress.Persistent.BaseImpl;
namespace Solution12.Module
{
[DefaultClassOptions]
public class WeightRecord : BaseObject
{
public WeightRecord(Session session) : base(session) { }
private DateTime _Date;
public DateTime Date
{
get
{
return _Date;
}
set
{
SetPropertyValue("Date", ref _Date, value);
}
}
private double _HeightInMetres;
public double HeightInMetres
{
get
{
return _HeightInMetres;
}
set
{
SetPropertyValue("HeightInMetres", ref _HeightInMetres, value);
}
}
private int _WeightInKilos;
public int WeightInKilos
{
get
{
return _WeightInKilos;
}
set
{
SetPropertyValue("WeightInKilos", ref _WeightInKilos, value);
}
}
[Persistent]
public double BMI
{
get
{
return (WeightInKilos == 0 || HeightInMetres == 0) ? 0 :
WeightInKilos / (HeightInMetres * HeightInMetres);
}
}
}
}
Now we want to add two more classes. TrainingProgramme which will record activity on a particular exercise machine and TrainingRecord, which will record the date on which a particular TrainingProgramme was executed. These two classes look like this:
using System;
using DevExpress.Xpo;
using DevExpress.Persistent.Base;
using DevExpress.Persistent.BaseImpl;
namespace Solution12.Module
{
[DefaultClassOptions]
public class TrainingProgramme : BaseObject
{
public TrainingProgramme(Session session) : base(session) { }
private string _Machine;
public string Machine
{
get
{
return _Machine;
}
set
{
SetPropertyValue("Machine", ref _Machine, value);
}
}
private int _Level;
public int Level
{
get
{
return _Level;
}
set
{
SetPropertyValue("Level", ref _Level, value);
}
}
private int _DurationInMinutes;
public int DurationInMinutes
{
get
{
return _DurationInMinutes;
}
set
{
SetPropertyValue("DurationInMinutes", ref _DurationInMinutes, value);
}
}
private TrainingRecord _TrainingRecord;
[Association("TrainingRecord-TrainingProgrammes")]
public TrainingRecord TrainingRecord
{
get
{
return _TrainingRecord;
}
set
{
SetPropertyValue("TrainingRecord", ref _TrainingRecord, value);
}
}
}
}
using System;
using DevExpress.Xpo;
using DevExpress.Persistent.Base;
using DevExpress.Persistent.BaseImpl;
namespace Solution12.Module
{
[DefaultClassOptions]
public class TrainingRecord : BaseObject
{
public TrainingRecord(Session session) : base(session) { }
private DateTime _Date;
public DateTime Date
{
get
{
return _Date;
}
set
{
SetPropertyValue("Date", ref _Date, value);
}
}
[Association("TrainingRecord-TrainingProgrammes")]
public XPCollection<TrainingProgramme> TrainingProgrammes
{
get
{
return GetCollection<TrainingProgramme>("TrainingProgrammes");
}
}
}
}
Giving us the following UI:
So, that about wraps it up for today. Next time we’ll tidy up the UI and add reporting to our fitness application. Until then happy XAFing! :-)