* Makefile:
* CatalogManager.cs: Let the catalog manager ensure all command form are instancied * PhysicalProduct.cs: A better ToString method * SaleForm.cs: doc * NpgsqlContentProvider.cs: registers a command * FrontOfficeApiController.cs: Set the catalog referer uri in each command form found in the catalog * FrontOfficeController.cs: creates the catalog with referer uri * instdbws.sql: the command has got a client, as registered user * Commande.cs: The command has an id and a product reference * IContentProvider.cs: new RegisterCommand method * WorkFlowManager.cs: yavscModel/WorkFlow/IContentProvider.cs
This commit is contained in:
14
Makefile
14
Makefile
@ -3,8 +3,10 @@ VERSION=1.1
|
||||
CONFIG=Debug
|
||||
DESTDIR=build/web/$(CONFIG)
|
||||
COPYUNCHANGED="false"
|
||||
PREPRODHOSTDIR=localhost:/srv/www/yavsc
|
||||
PRODHOSTDIR=localhost:/srv/www/lua
|
||||
LOCALHOSTDIR=localhost:/srv/www/lua
|
||||
TESTHOSTDIR=localhost:/srv/www/yavsc
|
||||
PREPRODHOSTDIR=lua.localdomain:/srv/yavsc
|
||||
PRODHOSTDIR=lua.localdomain:/srv/www/lua
|
||||
all: deploy
|
||||
|
||||
ddir:
|
||||
@ -24,12 +26,20 @@ clean:
|
||||
xbuild /t:Clean
|
||||
rm -rf $(DESTDIR)
|
||||
|
||||
rsync-local: deploy
|
||||
rsync -ravu build/web/$(CONFIG)/ root@$(LOCALHOSTDIR)
|
||||
|
||||
rsync-test: deploy
|
||||
rsync -ravu build/web/$(CONFIG)/ root@$(TESTHOSTDIR)
|
||||
|
||||
rsync-preprod: deploy
|
||||
rsync -ravu build/web/$(CONFIG)/ root@$(PREPRODHOSTDIR)
|
||||
|
||||
rsync-prod: deploy
|
||||
rsync -ravu build/web/$(CONFIG)/ root@$(PRODHOSTDIR)
|
||||
|
||||
rsync-all: rsync-local rsync-test rsync-preprod rsync-prod
|
||||
|
||||
sourcepkg:
|
||||
git archive --format=tar --prefix=yavsc-$(CONFIG)/ $(CONFIG) | bzip2 > yavsc-$(CONFIG).tar.bz2
|
||||
|
||||
|
@ -10,15 +10,29 @@ namespace SalesCatalog
|
||||
public static class CatalogManager
|
||||
{
|
||||
private static CatalogProvider defaultProvider = null;
|
||||
public static Catalog GetCatalog ()
|
||||
public static Catalog GetCatalog (string catalogUri)
|
||||
{
|
||||
|
||||
if (defaultProvider == null) {
|
||||
if (CatalogHelper.Config == null)
|
||||
CatalogHelper.LoadConfig ();
|
||||
defaultProvider = CatalogHelper.GetDefaultProvider ();
|
||||
|
||||
}
|
||||
return defaultProvider.GetCatalog ();
|
||||
Catalog res = defaultProvider.GetCatalog ();
|
||||
|
||||
// Assert res.Brands.All( x => x.DefaultForm != null );
|
||||
// Sanity fixes
|
||||
foreach (Brand b in res.Brands) {
|
||||
if (b.DefaultForm.CatalogReference==null)
|
||||
b.DefaultForm.CatalogReference = catalogUri;
|
||||
foreach (ProductCategory pc in b.Categories) {
|
||||
foreach (Product p in pc.Products) {
|
||||
if (p.CommandForm == null)
|
||||
p.CommandForm = b.DefaultForm;
|
||||
}
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ namespace SalesCatalog.Model
|
||||
|
||||
public override string ToString ()
|
||||
{
|
||||
return string.Format ("[PhysicalProduct: UnitaryPrice={0}]", UnitaryPrice);
|
||||
return string.Format ("[PhysicalProduct: Reference:{0} UnitaryPrice={1}]", Reference, UnitaryPrice);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,15 +5,35 @@ namespace SalesCatalog.Model
|
||||
{
|
||||
public class SaleForm
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets or sets the catalog reference.
|
||||
/// It must be non null,
|
||||
/// it is an Uri, returning the Xml
|
||||
/// Catalog at Http GET request
|
||||
/// </summary>
|
||||
/// <value>The catalog reference.</value>
|
||||
public string CatalogReference { get; set; }
|
||||
|
||||
public SaleForm ()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the action, that is,
|
||||
/// the Method of the FrontOffice controller
|
||||
/// called to post this Command form.
|
||||
/// It defaults to "Command"
|
||||
/// </summary>
|
||||
/// <value>The action.</value>
|
||||
public string Action {
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the input values of this command form.
|
||||
/// </summary>
|
||||
/// <value>The items.</value>
|
||||
public FormElement[] Items { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -12,6 +12,22 @@ namespace WorkFlowProvider
|
||||
{
|
||||
public class NpgsqlContentProvider: ProviderBase, IContentProvider
|
||||
{
|
||||
public long RegisterCommand (Commande com)
|
||||
{
|
||||
long id;
|
||||
using (NpgsqlConnection cnx = CreateConnection ()) {
|
||||
using (NpgsqlCommand cmd = cnx.CreateCommand ()) {
|
||||
cmd.CommandText =
|
||||
"insert into commandes (pref,creation) values (@pref,@creat) returning _id";
|
||||
cmd.Parameters.Add ("@pref", com.ProdRef);
|
||||
cmd.Parameters.Add ("@creat", com.CreationDate);
|
||||
cnx.Open ();
|
||||
com.Id = id = (long)cmd.ExecuteScalar ();
|
||||
}
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
public StatusChange[] GetWrittingStatuses (long wrid)
|
||||
{
|
||||
throw new NotImplementedException ();
|
||||
|
@ -41,14 +41,14 @@ namespace Yavsc.ApiControllers
|
||||
[AcceptVerbs("GET")]
|
||||
public Catalog Catalog ()
|
||||
{
|
||||
Catalog c = CatalogManager.GetCatalog ();
|
||||
Catalog c = CatalogManager.GetCatalog (Request.RequestUri.AbsolutePath);
|
||||
return c;
|
||||
}
|
||||
|
||||
[AcceptVerbs("GET")]
|
||||
public ProductCategory GetProductCategorie (string brandName, string prodCategorie)
|
||||
{
|
||||
return CatalogManager.GetCatalog ().GetBrand (brandName).GetProductCategory (prodCategorie)
|
||||
return CatalogManager.GetCatalog (Request.RequestUri.AbsolutePath).GetBrand (brandName).GetProductCategory (prodCategorie)
|
||||
;
|
||||
}
|
||||
/*
|
||||
|
@ -91,7 +91,7 @@ namespace Yavsc.Controllers
|
||||
public ActionResult Catalog ()
|
||||
{
|
||||
return View (
|
||||
CatalogManager.GetCatalog ()
|
||||
CatalogManager.GetCatalog (Request.Url.AbsolutePath)
|
||||
);
|
||||
}
|
||||
|
||||
@ -101,7 +101,7 @@ namespace Yavsc.Controllers
|
||||
[AcceptVerbs("GET")]
|
||||
public ActionResult Brand (string id)
|
||||
{
|
||||
Catalog c = CatalogManager.GetCatalog ();
|
||||
Catalog c = CatalogManager.GetCatalog (Request.Url.AbsolutePath);
|
||||
ViewData ["BrandName"] = id;
|
||||
return View ( c.GetBrand (id) );
|
||||
}
|
||||
@ -117,7 +117,7 @@ namespace Yavsc.Controllers
|
||||
{
|
||||
ViewData ["BrandName"] = id;
|
||||
return View (
|
||||
CatalogManager.GetCatalog ().GetBrand (id).GetProductCategory (pc)
|
||||
CatalogManager.GetCatalog (Request.Url.AbsolutePath).GetBrand (id).GetProductCategory (pc)
|
||||
);
|
||||
}
|
||||
|
||||
@ -128,7 +128,7 @@ namespace Yavsc.Controllers
|
||||
ViewData ["BrandName"] = id;
|
||||
ViewData ["ProdCatRef"] = pc;
|
||||
ViewData ["ProdRef"] = pref;
|
||||
Catalog cat = CatalogManager.GetCatalog ();
|
||||
Catalog cat = CatalogManager.GetCatalog (Request.Url.AbsolutePath);
|
||||
if (cat == null) {
|
||||
ViewData ["Message"] = "Catalog introuvable";
|
||||
ViewData ["RefType"] = "Catalog";
|
||||
@ -189,7 +189,7 @@ namespace Yavsc.Controllers
|
||||
Session["Basket"]=new List<Commande>();
|
||||
List<Commande> basket = Session["Basket"] as List<Commande>;
|
||||
// Add specified product command to the basket,
|
||||
basket.Add(new Commande(0,0,collection));
|
||||
basket.Add(Commande.Create(collection));
|
||||
return View (collection);
|
||||
} catch (Exception e)
|
||||
{
|
||||
|
@ -202,17 +202,40 @@ COMMENT ON COLUMN blfiles.blid IS 'Blog entry identifier (foreign key)';
|
||||
|
||||
CREATE TABLE commandes
|
||||
(
|
||||
id bigint NOT NULL, -- Identifiant unique de commande e, cours
|
||||
id bigserial NOT NULL, -- Identifiant unique de commande e, cours
|
||||
validation date, -- Date de validation
|
||||
prdref character varying(255) NOT NULL, -- Product reference from the unique valid catalog at the validation date
|
||||
CONSTRAINT commandes_pkey PRIMARY KEY (id)
|
||||
creation timestamp with time zone, -- creation date
|
||||
clientname character varying(255), -- user who created the command, client of this command
|
||||
applicationname character varying(255), -- application concerned by this command
|
||||
CONSTRAINT commandes_pkey PRIMARY KEY (id),
|
||||
CONSTRAINT commforeignuser FOREIGN KEY (clientname, applicationname)
|
||||
REFERENCES users (username, applicationname) MATCH SIMPLE
|
||||
ON UPDATE CASCADE ON DELETE CASCADE
|
||||
)
|
||||
WITH (
|
||||
OIDS=FALSE
|
||||
);
|
||||
ALTER TABLE commandes
|
||||
OWNER TO yavsc;
|
||||
COMMENT ON COLUMN commandes.id IS 'Identifiant unique de commande e, cours';
|
||||
COMMENT ON COLUMN commandes.validation IS 'Date de validation';
|
||||
COMMENT ON COLUMN commandes.prdref IS 'Product reference from the unique valid catalog at the validation date';
|
||||
COMMENT ON COLUMN commandes.creation IS 'creation date';
|
||||
COMMENT ON COLUMN commandes.clientname IS 'user who created the command, client of this command';
|
||||
COMMENT ON COLUMN commandes.applicationname IS 'application concerned by this command';
|
||||
|
||||
|
||||
-- Index: fki_commforeignuser
|
||||
|
||||
-- DROP INDEX fki_commforeignuser;
|
||||
|
||||
CREATE INDEX fki_commforeignuser
|
||||
ON commandes
|
||||
USING btree
|
||||
(clientname COLLATE pg_catalog."default", applicationname COLLATE pg_catalog."default");
|
||||
|
||||
|
||||
|
||||
-- Table: comment
|
||||
|
||||
|
@ -10,11 +10,20 @@ namespace Yavsc.Model.WorkFlow
|
||||
public class Commande
|
||||
{
|
||||
public DateTime CreationDate { get; set; }
|
||||
long Id { get; set; }
|
||||
public Commande(long catid, long pref, NameValueCollection collection)
|
||||
public long Id { get; set; }
|
||||
public string ProdRef { get; set; }
|
||||
public Commande() {
|
||||
}
|
||||
|
||||
public static Commande Create(NameValueCollection collection)
|
||||
{
|
||||
CreationDate = DateTime.Now;
|
||||
//TODO save it and get the id
|
||||
Commande cmd = new Commande ();
|
||||
// string catref=collection["catref"]; // Catalog Url from which formdata has been built
|
||||
cmd.ProdRef=collection["prodref"]; // Required product reference
|
||||
cmd.CreationDate = DateTime.Now;
|
||||
WorkFlowManager wm = new WorkFlowManager ();
|
||||
wm.RegisterCommand (cmd); // sets cmd.Id
|
||||
return cmd;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -112,6 +112,12 @@ namespace Yavsc.Model.WorkFlow
|
||||
/// <param name="status">Status.</param>
|
||||
/// <param name="username">Username.</param>
|
||||
void SetEstimateStatus (long estid,int status,string username);
|
||||
/// <summary>
|
||||
/// Registers the command.
|
||||
/// </summary>
|
||||
/// <returns>The command id in db.</returns>
|
||||
/// <param name="com">COM.</param>
|
||||
long RegisterCommand (Commande com);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16,6 +16,11 @@ namespace Yavsc.Model.WorkFlow
|
||||
{
|
||||
public static Catalog Catalog { get; set; }
|
||||
|
||||
public long RegisterCommand(Commande com)
|
||||
{
|
||||
return ContentProvider.RegisterCommand (com);
|
||||
}
|
||||
|
||||
public void UpdateEstimate (Estimate estim)
|
||||
{
|
||||
ContentProvider.UpdateEstimate (estim);
|
||||
@ -105,7 +110,7 @@ namespace Yavsc.Model.WorkFlow
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(productid)) {
|
||||
if (Catalog == null)
|
||||
Catalog = SalesCatalog.CatalogManager.GetCatalog ();
|
||||
Catalog = SalesCatalog.CatalogManager.GetCatalog ("/WorkFlowApi");
|
||||
if (Catalog == null)
|
||||
throw new Exception ("No catalog");
|
||||
Product p = Catalog.FindProduct (productid);
|
||||
|
Reference in New Issue
Block a user