
import ns org.osbp.tests.entities.BaseID
import ns org.osbp.tests.entities.BaseUUID
import ns org.osbp.tests.entities.DtoTestParent
import ns org.osbp.tests.entities.DtoTestChildContainment
import ns org.osbp.tests.entities.DtoTestChildCrossRef
import ns org.osbp.tests.entities.DtoTestBean
import ns org.osbp.tests.entities.Mcustomer
import ns org.osbp.tests.entities.CashRegister
import ns org.osbp.tests.entities.CashSlip
import ns org.osbp.tests.entities.CashPosition
import ns org.osbp.tests.entities.CashPayment
import ns org.osbp.tests.entities.CashPaymentMethod
import ns org.osbp.tests.entities.CompanyRelationType
import ns org.osbp.tests.entities.CompanyGroup
import ns org.osbp.tests.entities.Company
import ns org.osbp.tests.entities.Address
import ns org.osbp.tests.entities.Department
package org.osbp.tests.dtos {

	autoDto BaseIDDto wraps BaseID {

		inheritVar id
	}

	autoDto BaseUUIDDto wraps BaseUUID {

		inheritVar id
	}

	autoDto DtoTestParentDto extends BaseUUIDDto wraps DtoTestParent {

		inheritVar string
		inheritRef containmentChilds mapto DtoTestChildContainmentDto
		inheritRef crossRefChilds mapto DtoTestChildCrossRefDto
		inheritRef crossRefChild mapto DtoTestChildCrossRefDto
		inheritVar beanx mapto DtoTestBeanDto
	}

	autoDto DtoTestChildContainmentDto extends BaseUUIDDto wraps DtoTestChildContainment {

		inheritRef container mapto DtoTestParentDto
	}

	autoDto DtoTestChildCrossRefDto extends BaseUUIDDto wraps DtoTestChildCrossRef {

		inheritRef container mapto DtoTestParentDto
	}

	autoDto DtoTestBeanDto wraps DtoTestBean {

		inheritVar foo
		inheritRef crossRefChild mapto DtoTestChildCrossRefDto
	}

	autoDto McustomerDto extends BaseIDDto wraps Mcustomer {

		inheritVar account_num
		inheritVar lname
		inheritVar fname
		inheritVar mi
		inheritVar address1
		inheritVar address2
		inheritVar address3
		inheritVar address4
		inheritVar city
		inheritVar state_province
		inheritVar postal_code
		inheritVar country
		inheritVar phone1
		inheritVar phone2
		inheritVar birthdate
		inheritVar marital_status
		inheritVar yearly_income
		inheritVar gender
		inheritVar total_children
		inheritVar num_children_at_home
		inheritVar education
		inheritVar date_accnt_opened
		inheritVar member_card
		inheritVar occupation
		inheritVar houseowner
		inheritVar num_cars_owned
		inheritVar fullname
		inheritVar test
		inheritRef slips mapto CashSlipDto
		inheritVar foo
	}

	autoDto CashRegisterDto extends BaseUUIDDto wraps CashRegister {

		inheritVar num
		inheritVar ip
		inheritVar location
		inheritVar currentDay
		inheritRef slips mapto CashSlipDto
	}

	autoDto CashSlipDto extends BaseUUIDDto wraps CashSlip {

		inheritVar currentDay
		inheritVar now
		inheritVar cashier
		inheritVar total
		inheritVar serial
		inheritVar payed
		inheritRef positions mapto CashPositionDto
		inheritRef customer mapto McustomerDto
		inheritRef register mapto CashRegisterDto
		inheritRef payments mapto CashPaymentDto
	}

	autoDto CashPositionDto extends BaseUUIDDto wraps CashPosition {

		inheritVar now
		inheritVar quantity
		inheritVar price
		inheritVar amount
		inheritRef slip mapto CashSlipDto
	}

	autoDto CashPaymentDto extends BaseUUIDDto wraps CashPayment {

		inheritVar now
		inheritVar payed
		inheritRef slip mapto CashSlipDto
		inheritRef methodOfPayment mapto CashPaymentMethodDto
	}

	autoDto CashPaymentMethodDto extends BaseUUIDDto wraps CashPaymentMethod {

		inheritVar num
		inheritVar name
		inheritVar credit
		inheritVar imageName
		inheritVar lowerLimit
		inheritRef payments mapto CashPaymentDto
	}

	autoDto CompanyRelationTypeDto extends BaseUUIDDto wraps CompanyRelationType {

		inheritVar name
		inheritVar description
	}

	autoDto CompanyGroupDto extends BaseUUIDDto wraps CompanyGroup {

		inheritVar name
		inheritVar description
		inheritRef main_company mapto CompanyDto
		inheritRef companies mapto CompanyDto
	}

	autoDto CompanyDto extends BaseUUIDDto wraps Company {

		inheritRef company_group mapto CompanyGroupDto
		inheritVar name
		inheritVar description
		inheritRef relation_type mapto CompanyRelationTypeDto
		inheritRef address mapto AddressDto
		inheritRef departments mapto DepartmentDto
	}

	autoDto AddressDto extends BaseUUIDDto wraps Address {

		inheritRef company mapto CompanyDto
		inheritRef department mapto DepartmentDto
		inheritVar address1
		inheritVar address2
		inheritVar city
		inheritVar state_province
		inheritVar postal_code
		inheritVar country
		inheritVar email
		inheritVar landline
		inheritVar mobile
	}

	autoDto DepartmentDto extends BaseUUIDDto wraps Department {

		inheritRef company mapto CompanyDto
		inheritVar name
		inheritVar description
		inheritRef address mapto AddressDto
		inheritVar default_yearly_income
	}
}