You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
111 lines
2.7 KiB
111 lines
2.7 KiB
package controller;
|
|
import db.UserAmap;
|
|
import haxe.Json;
|
|
import neko.Web;
|
|
|
|
/**
|
|
* REST JSON API
|
|
*
|
|
* @author fbarbut
|
|
*/
|
|
class Api extends Controller
|
|
{
|
|
|
|
/**
|
|
* Public infos about this Cagette.net installation
|
|
*/
|
|
public function doDefault(){
|
|
|
|
var json : Dynamic = {
|
|
version:App.VERSION.toString(),
|
|
debug:App.config.DEBUG,
|
|
email:App.config.get("webmaster_email"),
|
|
groups:[]
|
|
|
|
};
|
|
|
|
for ( g in db.Amap.manager.all()){
|
|
|
|
//a strange way to exclude "test" accounts
|
|
if ( UserAmap.manager.count($amapId == g.id) > 20){
|
|
|
|
var place = g.getMainPlace();
|
|
|
|
var d = {
|
|
name:g.name,
|
|
cagetteNetwork:g.flags.has(db.Amap.AmapFlags.CagetteNetwork),
|
|
id:g.id,
|
|
url:"http://" + Web.getHostName() + "/group/" + g.id,
|
|
membersNum : g.getMembersNum(),
|
|
contracts: Lambda.array(Lambda.map(g.getActiveContracts(false), function(c) return c.name)),
|
|
place : {name:place.name, address1:place.address1,address2:place.address2,zipCode:place.zipCode,city:place.city }
|
|
};
|
|
json.groups.push(d);
|
|
}
|
|
|
|
}
|
|
|
|
Sys.print( Json.stringify(json) );
|
|
|
|
}
|
|
|
|
/*public function doError(){
|
|
sugoi.Web.setReturnCode(403);
|
|
}*/
|
|
|
|
|
|
#if plugins
|
|
//cagette-pro
|
|
public function doPro(d:haxe.web.Dispatch) {
|
|
d.dispatch(new pro.controller.api.Main());
|
|
}
|
|
#end
|
|
|
|
public function doShop(d:haxe.web.Dispatch) {
|
|
d.dispatch(new controller.api.Shop());
|
|
}
|
|
|
|
public function doOrder(d:haxe.web.Dispatch) {
|
|
d.dispatch(new controller.api.Order());
|
|
}
|
|
|
|
/**
|
|
* Get distribution planning for this group
|
|
*
|
|
* @param group
|
|
*/
|
|
public function doPlanning(group:db.Amap){
|
|
|
|
var contracts = group.getActiveContracts(true);
|
|
var cids = Lambda.map(contracts, function(p) return p.id);
|
|
var now = Date.now();
|
|
var now = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0);
|
|
var twoMonths = new Date(now.getFullYear(), now.getMonth()+2, now.getDate(), 0, 0, 0);
|
|
var distribs = db.Distribution.manager.search(($contractId in cids) && ($date >= now) && ($date<=twoMonths), { orderBy:date }, false);
|
|
|
|
var out = new Array<{id:Int,start:Date,end:Date,contract:String,contractId:Int,place:Dynamic}>();
|
|
|
|
for ( d in distribs){
|
|
|
|
var place = d.place;
|
|
var p = {name:place.name, address1:place.address1,address2:place.address2,zipCode:place.zipCode,city:place.city }
|
|
out.push({id:d.id,start:d.date,end:d.end,contract:d.contract.name,contractId:d.contract.id,place:p});
|
|
}
|
|
|
|
Sys.print(Json.stringify(out));
|
|
|
|
}
|
|
|
|
public function doUser(d:haxe.web.Dispatch){
|
|
d.dispatch(new controller.api.User());
|
|
}
|
|
|
|
public function doGroup(d:haxe.web.Dispatch){
|
|
d.dispatch(new controller.api.Group());
|
|
}
|
|
|
|
public function doProduct(d:haxe.web.Dispatch){
|
|
d.dispatch(new controller.api.Product());
|
|
}
|
|
|
|
}
|