# hexya **Repository Path**: jason156/hexya ## Basic Information - **Project Name**: hexya - **Description**: Go版本的Odoo - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 3 - **Created**: 2020-10-18 - **Last Updated**: 2022-11-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [![Build Status](https://travis-ci.com/hexya-erp/hexya.svg?branch=master)](https://travis-ci.com/hexya-erp/hexya) [![Go Report Card](https://goreportcard.com/badge/hexya-erp/hexya)](https://goreportcard.com/report/hexya-erp/hexya) [![codecov](https://codecov.io/gh/hexya-erp/hexya/branch/master/graph/badge.svg)](https://codecov.io/gh/hexya-erp/hexya) [![godoc reference](https://godoc.org/github.com/hexya-erp/hexya?status.png)](https://godoc.org/github.com/hexya-erp/hexya) [![Gitter](https://badges.gitter.im/hexya-erp/community.svg)](https://gitter.im/hexya-erp/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) # Hexya Hexya is an open source ERP and a business application development framework written in Go. This repository houses the business application development framework. The ERP is built by integrating modules of the [Hexya Addons Project](https://github.com/hexya-addons) ## Features of the framework The Hexya framework is designed to develop business applications quickly and safely. It includes all needed components in a very opinionated way. The examples below are here to give you a first idea of Hexya. Head to the `/doc` directory and especially our [Tutorial](./doc/tutorial.adoc) if you want to start developing your business application with Hexya. ### ORM Hexya includes a full-featured type safe ORM, including a type safe query builder. Declare a model and add some fields ```go var fields_User = map[string]models.FieldDefinition{ "Name": fields.Char{String: "Name", Help: "The user's username", Unique: true, NoCopy: true, OnChange: h.User().Methods().OnChangeName()}, "Email": fields.Char{Help: "The user's email address", Size: 100, Index: true}, "Password": fields.Char{}, "IsStaff": fields.Boolean{String: "Is a Staff Member", Help: "Set to true if this user is a member of staff"}, } func init() { models.NewModel("User") h.User().AddFields(fields_User) } ``` Use the ORM to create a record in the database with type-safe data ```go newUser := h.User().Create(env, h.User().NewData(). SetName("John"). SetEmail("john@example.com"). SetIsStaff(true)) ``` Search the database using the type-safe query builder and update records directly ```go myUsers := h.User().Search(env, q.User().Name().Contains("John"). And().Email().NotEquals("contact@example.com")) for _, myUser := range myUsers.Records() { if myUser.IsStaff() { myUser.SetEmail("contact@example.com") } } ``` Add methods to the models ```go // GetEmail returns the Email of the user with the given name func user_GetEmail(rs m.UserSet, name string) string { user := h.User().Search(env, q.User().Name().Equals("John")).Limit(1) user.Sanitize() // Call other methods of the model return user.Email() // If user is empty, then Email() will return the empty string } func init() { h.User().NewMethod("GetEmail", user_GetEmail) } ``` ### Views Define views of different types using a simple XML view definition and let the framework do the rendering: ```xml