
package org.osbp.mysmartshop.dtos {

	import org.osbp.mysmartshop.entities.*

	autoDto BaseIDDto wraps BaseID {

		inherit var id
	}

	autoDto BaseUUIDDto wraps BaseUUID {

		inherit var id
	}

	autoDto DtoTestParentDto extends BaseUUIDDto wraps DtoTestParent {

		inherit var string
		inherit ref containmentChilds mapto DtoTestChildContainmentDto
		inherit ref crossRefChilds mapto DtoTestChildCrossRefDto
		inherit ref crossRefChild mapto DtoTestChildCrossRefDto
		inherit var beanx
	}

	autoDto DtoTestChildContainmentDto extends BaseUUIDDto wraps DtoTestChildContainment {

		inherit ref container mapto DtoTestParentDto
	}

	autoDto DtoTestChildCrossRefDto extends BaseUUIDDto wraps DtoTestChildCrossRef {

		inherit ref container mapto DtoTestParentDto
	}

	autoDto DtoTestBeanDto wraps DtoTestBean {

		inherit var foo
		inherit ref crossRefChild mapto DtoTestChildCrossRefDto
	}

	autoDto McustomerDto extends BaseIDDto wraps Mcustomer {

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

	autoDto CashRegisterDto extends BaseUUIDDto wraps CashRegister {

		inherit var num
		inherit var ip
		inherit var location
		inherit var currentDay
		inherit ref slips mapto CashSlipDto
	}

	autoDto CashSlipDto extends BaseUUIDDto wraps CashSlip {

		inherit var currentDay
		inherit var now
		inherit var cashier
		inherit var total
		inherit var serial
		inherit var payed
		inherit ref positions mapto CashPositionDto
		inherit ref customer mapto McustomerDto
		inherit ref register mapto CashRegisterDto
		inherit ref payments mapto CashPaymentDto
	}

	autoDto CashPositionDto extends BaseUUIDDto wraps CashPosition {

		inherit var now
		inherit var quantity
		inherit var price
		inherit var amount
		inherit ref slip mapto CashSlipDto
	}

	autoDto CashPaymentDto extends BaseUUIDDto wraps CashPayment {

		inherit var now
		inherit var payed
		inherit ref slip mapto CashSlipDto
		inherit ref methodOfPayment mapto CashPaymentMethodDto
	}

	autoDto CashPaymentMethodDto extends BaseUUIDDto wraps CashPaymentMethod {

		inherit var num
		inherit var name
		inherit var credit
		inherit var imageName
		inherit var lowerLimit
		inherit ref payments mapto CashPaymentDto
	}

	autoDto CompanyRelationTypeDto extends BaseUUIDDto wraps CompanyRelationType {

		inherit var name
		inherit var description
	}

	autoDto CompanyGroupDto extends BaseUUIDDto wraps CompanyGroup {

		inherit var name
		inherit var description
		inherit ref main_company mapto CompanyDto
		inherit ref companies mapto CompanyDto
	}

	autoDto CompanyDto extends BaseUUIDDto wraps Company {

		inherit ref company_group mapto CompanyGroupDto
		inherit var name
		inherit var description
		inherit ref relation_type mapto CompanyRelationTypeDto
		inherit ref address mapto AddressDto
		inherit ref departments mapto DepartmentDto
	}

	autoDto AddressDto extends BaseUUIDDto wraps Address {

		inherit ref company mapto CompanyDto
		inherit ref department mapto DepartmentDto
		inherit var address1
		inherit var address2
		inherit var city
		inherit var state_province
		inherit var postal_code
		inherit var country
		inherit var email
		inherit var landline
		inherit var mobile
	}

	autoDto DepartmentDto extends BaseUUIDDto wraps Department {

		inherit ref company mapto CompanyDto
		inherit var name
		inherit var description
		inherit ref address mapto AddressDto
		inherit var default_yearly_income
	}

}