Merge branch 'basket' of hc-companies/forecast_api into dev
This commit is contained in:
		
						commit
						b881fae5b4
					
				
							
								
								
									
										236
									
								
								index.js
									
									
									
									
									
								
							
							
						
						
									
										236
									
								
								index.js
									
									
									
									
									
								
							@ -18,8 +18,8 @@ var options = {
 | 
			
		||||
    passprase: []
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
https.createServer(options,server).listen(process.env.nodeport, () => {
 | 
			
		||||
    console.log('started on '+ process.env.nodeport)
 | 
			
		||||
https.createServer(options, server).listen(process.env.nodeport, () => {
 | 
			
		||||
    console.log('started on ' + process.env.nodeport)
 | 
			
		||||
});
 | 
			
		||||
//server.listen(3000, () => console.log('started'))
 | 
			
		||||
 | 
			
		||||
@ -34,7 +34,7 @@ var Postgres = new pg.Client({
 | 
			
		||||
});
 | 
			
		||||
Postgres.connect();
 | 
			
		||||
 | 
			
		||||
Postgres.FirstRow = function (inSQL, args, inResponse) {
 | 
			
		||||
Postgres.FirstRow = function(inSQL, args, inResponse) {
 | 
			
		||||
    Postgres.query(inSQL, args, (err, res) => {
 | 
			
		||||
        if (err === null) {
 | 
			
		||||
            inResponse.json(res.rows[0]);
 | 
			
		||||
@ -55,14 +55,14 @@ server.get('/pgbadger', (req, res) => res.sendFile(process.env.wd + 'logs.html')
 | 
			
		||||
 | 
			
		||||
server.get('/totals', (req, res) => res.sendFile(process.env.wd + 'totals.log'))
 | 
			
		||||
 | 
			
		||||
server.get('/test_sql', function(req, res){
 | 
			
		||||
server.get('/test_sql', function(req, res) {
 | 
			
		||||
    var path = './route_meta/scenario_package.sql'
 | 
			
		||||
    var callback = function(arg){
 | 
			
		||||
    var callback = function(arg) {
 | 
			
		||||
        res.send(arg)
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data){
 | 
			
		||||
        if (!err){
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data) {
 | 
			
		||||
        if (!err) {
 | 
			
		||||
            callback(data);
 | 
			
		||||
        } else {
 | 
			
		||||
            callback(err);
 | 
			
		||||
@ -70,21 +70,21 @@ server.get('/test_sql', function(req, res){
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
server.get('/get_pool', bodyParser.json(), function (req, res) {
 | 
			
		||||
server.get('/get_pool', bodyParser.json(), function(req, res) {
 | 
			
		||||
 | 
			
		||||
    var sql = "";
 | 
			
		||||
    var args = [req.body.quota_rep];
 | 
			
		||||
    var path = './route_sql/get_pool.sql';
 | 
			
		||||
    var callback = function(arg){
 | 
			
		||||
    var callback = function(arg) {
 | 
			
		||||
        sql = arg;
 | 
			
		||||
        console.log(new Date().toISOString() + "-------------------------get pool:----------------------------");
 | 
			
		||||
        console.log(req.body.quota_rep);
 | 
			
		||||
        sql = sql.replace("rep_replace",req.body.quota_rep);
 | 
			
		||||
        Postgres.FirstRow(sql,[],res)
 | 
			
		||||
        sql = sql.replace("rep_replace", req.body.quota_rep);
 | 
			
		||||
        Postgres.FirstRow(sql, [], res)
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data){
 | 
			
		||||
        if (!err){
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data) {
 | 
			
		||||
        if (!err) {
 | 
			
		||||
            callback(data);
 | 
			
		||||
        } else {
 | 
			
		||||
            console.log("fatal error pulling sql file")
 | 
			
		||||
@ -94,7 +94,7 @@ server.get('/get_pool', bodyParser.json(), function (req, res) {
 | 
			
		||||
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
server.get('/scenario_package', bodyParser.json(), function (req, res) {
 | 
			
		||||
server.get('/scenario_package', bodyParser.json(), function(req, res) {
 | 
			
		||||
 | 
			
		||||
    var sql = "";
 | 
			
		||||
    var w = "";
 | 
			
		||||
@ -103,8 +103,8 @@ server.get('/scenario_package', bodyParser.json(), function (req, res) {
 | 
			
		||||
    var args = [];
 | 
			
		||||
    var path = './route_sql/scenario_package.sql';
 | 
			
		||||
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data){
 | 
			
		||||
        if (!err){
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data) {
 | 
			
		||||
        if (!err) {
 | 
			
		||||
            callback(data);
 | 
			
		||||
        } else {
 | 
			
		||||
            console.log("fatal error pulling sql file")
 | 
			
		||||
@ -112,7 +112,7 @@ server.get('/scenario_package', bodyParser.json(), function (req, res) {
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    var callback = function(arg){
 | 
			
		||||
    var callback = function(arg) {
 | 
			
		||||
        sql = arg;
 | 
			
		||||
 | 
			
		||||
        //parse request body into a where clause
 | 
			
		||||
@ -126,14 +126,14 @@ server.get('/scenario_package', bodyParser.json(), function (req, res) {
 | 
			
		||||
        console.log(new Date().toISOString() + "-------------------------get scenario:------------------------------")
 | 
			
		||||
        console.log(req.body);
 | 
			
		||||
        //parse the where clause into the main sql statement
 | 
			
		||||
        sql = sql.replace(new RegExp("where_clause",'g'),w)
 | 
			
		||||
        //execute the sql and send the result
 | 
			
		||||
        //console.log(sql);
 | 
			
		||||
        Postgres.FirstRow(sql,[],res)
 | 
			
		||||
        sql = sql.replace(new RegExp("where_clause", 'g'), w)
 | 
			
		||||
            //execute the sql and send the result
 | 
			
		||||
            //console.log(sql);
 | 
			
		||||
        Postgres.FirstRow(sql, [], res)
 | 
			
		||||
    };
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
server.get('/list_changes', bodyParser.json(), function (req, res) {
 | 
			
		||||
server.get('/list_changes', bodyParser.json(), function(req, res) {
 | 
			
		||||
 | 
			
		||||
    var sql = "";
 | 
			
		||||
    var w = "";
 | 
			
		||||
@ -142,8 +142,8 @@ server.get('/list_changes', bodyParser.json(), function (req, res) {
 | 
			
		||||
    var args = [];
 | 
			
		||||
    var path = './route_sql/list_changes.sql';
 | 
			
		||||
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data){
 | 
			
		||||
        if (!err){
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data) {
 | 
			
		||||
        if (!err) {
 | 
			
		||||
            callback(data);
 | 
			
		||||
        } else {
 | 
			
		||||
            console.log("fatal error pulling sql file")
 | 
			
		||||
@ -151,20 +151,20 @@ server.get('/list_changes', bodyParser.json(), function (req, res) {
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    var callback = function(arg){
 | 
			
		||||
    var callback = function(arg) {
 | 
			
		||||
        sql = arg;
 | 
			
		||||
 | 
			
		||||
        console.log(new Date().toISOString() +"-------------------------list changes:------------------------------")
 | 
			
		||||
        console.log(new Date().toISOString() + "-------------------------list changes:------------------------------")
 | 
			
		||||
        console.log(req.body);
 | 
			
		||||
        //parse the where clause into the main sql statement
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_user",'g'),JSON.stringify(req.body))
 | 
			
		||||
        //execute the sql and send the result
 | 
			
		||||
        //console.log(sql);
 | 
			
		||||
        Postgres.FirstRow(sql,[],res)
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_user", 'g'), JSON.stringify(req.body.quota_rep_descr))
 | 
			
		||||
            //execute the sql and send the result
 | 
			
		||||
        console.log(sql);
 | 
			
		||||
        Postgres.FirstRow(sql, [], res)
 | 
			
		||||
    };
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
server.post('/addmonth_v', bodyParser.json(), function (req, res) {
 | 
			
		||||
server.post('/addmonth_v', bodyParser.json(), function(req, res) {
 | 
			
		||||
 | 
			
		||||
    var sql = "";
 | 
			
		||||
    var w = "";
 | 
			
		||||
@ -173,8 +173,8 @@ server.post('/addmonth_v', bodyParser.json(), function (req, res) {
 | 
			
		||||
    var args = [];
 | 
			
		||||
    var path = './route_sql/addmonth_vd.sql';
 | 
			
		||||
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data){
 | 
			
		||||
        if (!err){
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data) {
 | 
			
		||||
        if (!err) {
 | 
			
		||||
            callback(data);
 | 
			
		||||
        } else {
 | 
			
		||||
            console.log("fatal error pulling sql file")
 | 
			
		||||
@ -182,7 +182,7 @@ server.post('/addmonth_v', bodyParser.json(), function (req, res) {
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    var callback = function(arg){
 | 
			
		||||
    var callback = function(arg) {
 | 
			
		||||
        sql = arg;
 | 
			
		||||
        //buile where clause expression
 | 
			
		||||
        ({ c, w, d } = build_where(req, c, w, d, args));
 | 
			
		||||
@ -191,22 +191,22 @@ server.post('/addmonth_v', bodyParser.json(), function (req, res) {
 | 
			
		||||
            res.send("no body was sent");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        console.log(new Date().toISOString() +"-----------------------------add month volume:---------------------------------");
 | 
			
		||||
        console.log(new Date().toISOString() + "-----------------------------add month volume:---------------------------------");
 | 
			
		||||
        req.body.stamp = new Date().toISOString()
 | 
			
		||||
        console.log(req.body);
 | 
			
		||||
        //console.log(args);
 | 
			
		||||
        sql = sql.replace(new RegExp("scenario = target_scenario",'g'),w);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_increment",'g'),req.body.qty);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_month",'g'),req.body.month);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_version",'g'),req.body.scenario.version);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_source",'g'),req.body.source);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_iterdef",'g'),JSON.stringify(req.body));
 | 
			
		||||
        sql = sql.replace(new RegExp("scenario = target_scenario", 'g'), w);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_increment", 'g'), req.body.qty);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_month", 'g'), req.body.month);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_version", 'g'), req.body.scenario.version);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_source", 'g'), req.body.source);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_iterdef", 'g'), JSON.stringify(req.body));
 | 
			
		||||
        console.log(sql)
 | 
			
		||||
        Postgres.FirstRow(sql,[],res)
 | 
			
		||||
        Postgres.FirstRow(sql, [], res)
 | 
			
		||||
    }
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
server.post('/addmonth_vp', bodyParser.json(), function (req, res) {
 | 
			
		||||
server.post('/addmonth_vp', bodyParser.json(), function(req, res) {
 | 
			
		||||
 | 
			
		||||
    var sql = "";
 | 
			
		||||
    var w = "";
 | 
			
		||||
@ -215,7 +215,7 @@ server.post('/addmonth_vp', bodyParser.json(), function (req, res) {
 | 
			
		||||
    var args = [];
 | 
			
		||||
    var path = './route_sql/addmonth_vupd.sql';
 | 
			
		||||
 | 
			
		||||
    var callback = function(arg){
 | 
			
		||||
    var callback = function(arg) {
 | 
			
		||||
        sql = arg;
 | 
			
		||||
 | 
			
		||||
        ({ c, w, d } = build_where(req, c, w, d, args));
 | 
			
		||||
@ -224,23 +224,23 @@ server.post('/addmonth_vp', bodyParser.json(), function (req, res) {
 | 
			
		||||
            res.send("no body was sent");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        console.log(new Date().toISOString() +"------------------add month volume and price:-------------------");
 | 
			
		||||
        console.log(new Date().toISOString() + "------------------add month volume and price:-------------------");
 | 
			
		||||
        req.body.stamp = new Date().toISOString()
 | 
			
		||||
        console.log(req.body);
 | 
			
		||||
        //console.log(args);
 | 
			
		||||
        sql = sql.replace(new RegExp("where_clause",'g'),w);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_volume",'g'),req.body.qty);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_price",'g'),req.body.amount);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_month",'g'),req.body.month);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_version",'g'),req.body.scenario.version);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_source",'g'),req.body.source);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_iterdef",'g'),JSON.stringify(req.body));
 | 
			
		||||
        sql = sql.replace(new RegExp("where_clause", 'g'), w);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_volume", 'g'), req.body.qty);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_price", 'g'), req.body.amount);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_month", 'g'), req.body.month);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_version", 'g'), req.body.scenario.version);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_source", 'g'), req.body.source);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_iterdef", 'g'), JSON.stringify(req.body));
 | 
			
		||||
        console.log(sql);
 | 
			
		||||
        Postgres.FirstRow(sql,[],res)
 | 
			
		||||
        Postgres.FirstRow(sql, [], res)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data){
 | 
			
		||||
        if (!err){
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data) {
 | 
			
		||||
        if (!err) {
 | 
			
		||||
            callback(data);
 | 
			
		||||
        } else {
 | 
			
		||||
            console.log("fatal error pulling sql file")
 | 
			
		||||
@ -249,7 +249,7 @@ server.post('/addmonth_vp', bodyParser.json(), function (req, res) {
 | 
			
		||||
    });
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
server.post('/scale_v', bodyParser.json(), function (req, res) {
 | 
			
		||||
server.post('/scale_v', bodyParser.json(), function(req, res) {
 | 
			
		||||
 | 
			
		||||
    var sql = "";
 | 
			
		||||
    var w = "";
 | 
			
		||||
@ -258,7 +258,7 @@ server.post('/scale_v', bodyParser.json(), function (req, res) {
 | 
			
		||||
    var args = [];
 | 
			
		||||
    var path = './route_sql/scale_vd.sql';
 | 
			
		||||
 | 
			
		||||
    var callback = function(arg){
 | 
			
		||||
    var callback = function(arg) {
 | 
			
		||||
        sql = arg;
 | 
			
		||||
 | 
			
		||||
        ({ c, w, d } = build_where(req, c, w, d, args));
 | 
			
		||||
@ -267,21 +267,21 @@ server.post('/scale_v', bodyParser.json(), function (req, res) {
 | 
			
		||||
            res.send("no body was sent");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        console.log(new Date().toISOString() +"-----------------------scale volume:------------------------------");
 | 
			
		||||
        console.log(new Date().toISOString() + "-----------------------scale volume:------------------------------");
 | 
			
		||||
        req.body.stamp = new Date().toISOString()
 | 
			
		||||
        console.log(req.body);
 | 
			
		||||
        //console.log(args);
 | 
			
		||||
        sql = sql.replace(new RegExp("where_clause",'g'),w);
 | 
			
		||||
        sql = sql.replace(new RegExp("incr_qty",'g'),req.body.qty);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_version",'g'),req.body.scenario.version);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_source",'g'),req.body.source);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_iterdef",'g'),JSON.stringify(req.body));
 | 
			
		||||
        sql = sql.replace(new RegExp("where_clause", 'g'), w);
 | 
			
		||||
        sql = sql.replace(new RegExp("incr_qty", 'g'), req.body.qty);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_version", 'g'), req.body.scenario.version);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_source", 'g'), req.body.source);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_iterdef", 'g'), JSON.stringify(req.body));
 | 
			
		||||
        console.log(sql);
 | 
			
		||||
        Postgres.FirstRow(sql,[],res)
 | 
			
		||||
        Postgres.FirstRow(sql, [], res)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data){
 | 
			
		||||
        if (!err){
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data) {
 | 
			
		||||
        if (!err) {
 | 
			
		||||
            callback(data);
 | 
			
		||||
        } else {
 | 
			
		||||
            console.log("fatal error pulling sql file")
 | 
			
		||||
@ -290,7 +290,7 @@ server.post('/scale_v', bodyParser.json(), function (req, res) {
 | 
			
		||||
    });
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
server.post('/scale_p', bodyParser.json(), function (req, res) {
 | 
			
		||||
server.post('/scale_p', bodyParser.json(), function(req, res) {
 | 
			
		||||
 | 
			
		||||
    var sql = "";
 | 
			
		||||
    var w = "";
 | 
			
		||||
@ -299,7 +299,7 @@ server.post('/scale_p', bodyParser.json(), function (req, res) {
 | 
			
		||||
    var args = [];
 | 
			
		||||
    var path = './route_sql/scale_pd.sql';
 | 
			
		||||
 | 
			
		||||
    var callback = function(arg){
 | 
			
		||||
    var callback = function(arg) {
 | 
			
		||||
        sql = arg;
 | 
			
		||||
 | 
			
		||||
        ({ c, w, d } = build_where(req, c, w, d, args));
 | 
			
		||||
@ -308,21 +308,21 @@ server.post('/scale_p', bodyParser.json(), function (req, res) {
 | 
			
		||||
            res.send("no body was sent");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        console.log(new Date().toISOString() +"--------------------scale price:-------------------");
 | 
			
		||||
        console.log(new Date().toISOString() + "--------------------scale price:-------------------");
 | 
			
		||||
        req.body.stamp = new Date().toISOString()
 | 
			
		||||
        console.log(req.body);
 | 
			
		||||
        //console.log(args);
 | 
			
		||||
        sql = sql.replace(new RegExp("where_clause",'g'),w);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_increment",'g'),req.body.amount);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_version",'g'),req.body.scenario.version);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_source",'g'),req.body.source);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_iterdef",'g'),JSON.stringify(req.body));
 | 
			
		||||
        sql = sql.replace(new RegExp("where_clause", 'g'), w);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_increment", 'g'), req.body.amount);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_version", 'g'), req.body.scenario.version);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_source", 'g'), req.body.source);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_iterdef", 'g'), JSON.stringify(req.body));
 | 
			
		||||
        console.log(sql);
 | 
			
		||||
        Postgres.FirstRow(sql,[],res)
 | 
			
		||||
        Postgres.FirstRow(sql, [], res)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data){
 | 
			
		||||
        if (!err){
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data) {
 | 
			
		||||
        if (!err) {
 | 
			
		||||
            callback(data);
 | 
			
		||||
        } else {
 | 
			
		||||
            console.log("fatal error pulling sql file")
 | 
			
		||||
@ -331,7 +331,7 @@ server.post('/scale_p', bodyParser.json(), function (req, res) {
 | 
			
		||||
    });
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
server.post('/scale_vp', bodyParser.json(), function (req, res) {
 | 
			
		||||
server.post('/scale_vp', bodyParser.json(), function(req, res) {
 | 
			
		||||
 | 
			
		||||
    var sql = "";
 | 
			
		||||
    var w = "";
 | 
			
		||||
@ -340,7 +340,7 @@ server.post('/scale_vp', bodyParser.json(), function (req, res) {
 | 
			
		||||
    var args = [];
 | 
			
		||||
    var path = './route_sql/scale_vupd.sql';
 | 
			
		||||
 | 
			
		||||
    var callback = function(arg){
 | 
			
		||||
    var callback = function(arg) {
 | 
			
		||||
        sql = arg;
 | 
			
		||||
 | 
			
		||||
        ({ c, w, d } = build_where(req, c, w, d, args));
 | 
			
		||||
@ -349,22 +349,22 @@ server.post('/scale_vp', bodyParser.json(), function (req, res) {
 | 
			
		||||
            res.send("no body was sent");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        console.log(new Date().toISOString() +"--------------------scale volume & price:-------------------");
 | 
			
		||||
        console.log(new Date().toISOString() + "--------------------scale volume & price:-------------------");
 | 
			
		||||
        req.body.stamp = new Date().toISOString()
 | 
			
		||||
        console.log(req.body);
 | 
			
		||||
        //console.log(args);
 | 
			
		||||
        sql = sql.replace(new RegExp("where_clause",'g'),w);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_vol",'g'),req.body.qty);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_prc",'g'),req.body.amount);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_version",'g'),req.body.scenario.version);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_source",'g'),req.body.source);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_iterdef",'g'),JSON.stringify(req.body));
 | 
			
		||||
        sql = sql.replace(new RegExp("where_clause", 'g'), w);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_vol", 'g'), req.body.qty);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_prc", 'g'), req.body.amount);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_version", 'g'), req.body.scenario.version);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_source", 'g'), req.body.source);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_iterdef", 'g'), JSON.stringify(req.body));
 | 
			
		||||
        console.log(sql);
 | 
			
		||||
        Postgres.FirstRow(sql,[],res)
 | 
			
		||||
        Postgres.FirstRow(sql, [], res)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data){
 | 
			
		||||
        if (!err){
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data) {
 | 
			
		||||
        if (!err) {
 | 
			
		||||
            callback(data);
 | 
			
		||||
        } else {
 | 
			
		||||
            console.log("fatal error pulling sql file")
 | 
			
		||||
@ -373,7 +373,7 @@ server.post('/scale_vp', bodyParser.json(), function (req, res) {
 | 
			
		||||
    });
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
server.post('/new_part', bodyParser.json(), function (req, res) {
 | 
			
		||||
server.post('/new_part', bodyParser.json(), function(req, res) {
 | 
			
		||||
 | 
			
		||||
    var sql = "";
 | 
			
		||||
    var w = "";
 | 
			
		||||
@ -382,7 +382,7 @@ server.post('/new_part', bodyParser.json(), function (req, res) {
 | 
			
		||||
    var args = [];
 | 
			
		||||
    var path = './route_sql/new_part.sql';
 | 
			
		||||
 | 
			
		||||
    var callback = function(arg){
 | 
			
		||||
    var callback = function(arg) {
 | 
			
		||||
        sql = arg;
 | 
			
		||||
 | 
			
		||||
        ({ c, w, d } = build_where(req, c, w, d, args));
 | 
			
		||||
@ -391,23 +391,23 @@ server.post('/new_part', bodyParser.json(), function (req, res) {
 | 
			
		||||
            res.send("no body was sent");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        console.log(new Date().toISOString() +"--------------------new part:-------------------");
 | 
			
		||||
        console.log(new Date().toISOString() + "--------------------new part:-------------------");
 | 
			
		||||
        req.body.stamp = new Date().toISOString()
 | 
			
		||||
        console.log(req.body);
 | 
			
		||||
        //console.log(args);
 | 
			
		||||
        sql = sql.replace(new RegExp("where_clause",'g'),w);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_vol",'g'),req.body.qty);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_prc",'g'),req.body.amount);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_request",'g'),JSON.stringify(req.body));
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_version",'g'),req.body.scenario.version);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_source",'g'),req.body.source);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_iterdef",'g'),JSON.stringify(req.body));
 | 
			
		||||
        sql = sql.replace(new RegExp("where_clause", 'g'), w);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_vol", 'g'), req.body.qty);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_prc", 'g'), req.body.amount);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_request", 'g'), JSON.stringify(req.body));
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_version", 'g'), req.body.scenario.version);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_source", 'g'), req.body.source);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_iterdef", 'g'), JSON.stringify(req.body));
 | 
			
		||||
        console.log(sql);
 | 
			
		||||
        Postgres.FirstRow(sql,[],res)
 | 
			
		||||
        Postgres.FirstRow(sql, [], res)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data){
 | 
			
		||||
        if (!err){
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data) {
 | 
			
		||||
        if (!err) {
 | 
			
		||||
            callback(data);
 | 
			
		||||
        } else {
 | 
			
		||||
            console.log("fatal error pulling sql file")
 | 
			
		||||
@ -416,7 +416,7 @@ server.post('/new_part', bodyParser.json(), function (req, res) {
 | 
			
		||||
    });
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
server.post('/new_basket', bodyParser.json(), function (req, res) {
 | 
			
		||||
server.post('/new_basket', bodyParser.json(), function(req, res) {
 | 
			
		||||
 | 
			
		||||
    var sql = "";
 | 
			
		||||
    var w = "";
 | 
			
		||||
@ -425,7 +425,7 @@ server.post('/new_basket', bodyParser.json(), function (req, res) {
 | 
			
		||||
    var args = [];
 | 
			
		||||
    var path = './route_sql/new_basket.sql';
 | 
			
		||||
 | 
			
		||||
    var callback = function(arg){
 | 
			
		||||
    var callback = function(arg) {
 | 
			
		||||
        sql = arg;
 | 
			
		||||
 | 
			
		||||
        ({ c, w, d } = build_where(req, c, w, d, args));
 | 
			
		||||
@ -434,23 +434,23 @@ server.post('/new_basket', bodyParser.json(), function (req, res) {
 | 
			
		||||
            res.send("no body was sent");
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        console.log(new Date().toISOString() +"--------------------new basket:-------------------");
 | 
			
		||||
        console.log(new Date().toISOString() + "--------------------new basket:-------------------");
 | 
			
		||||
        req.body.stamp = new Date().toISOString()
 | 
			
		||||
        console.log(req.body);
 | 
			
		||||
        //console.log(args);
 | 
			
		||||
        sql = sql.replace(new RegExp("where_clause",'g'),w);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_vol",'g'),req.body.qty);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_prc",'g'),req.body.amount);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_request",'g'),JSON.stringify(req.body));
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_version",'g'),req.body.scenario.version);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_source",'g'),req.body.source);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_iterdef",'g'),JSON.stringify(req.body));
 | 
			
		||||
        sql = sql.replace(new RegExp("where_clause", 'g'), w);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_vol", 'g'), req.body.qty);
 | 
			
		||||
        sql = sql.replace(new RegExp("target_prc", 'g'), req.body.amount);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_request", 'g'), JSON.stringify(req.body));
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_version", 'g'), req.body.scenario.version);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_source", 'g'), req.body.source);
 | 
			
		||||
        sql = sql.replace(new RegExp("replace_iterdef", 'g'), JSON.stringify(req.body));
 | 
			
		||||
        console.log(sql);
 | 
			
		||||
        Postgres.FirstRow(sql,[],res)
 | 
			
		||||
        Postgres.FirstRow(sql, [], res)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data){
 | 
			
		||||
        if (!err){
 | 
			
		||||
    fs.readFile(path, 'utf8', function(err, data) {
 | 
			
		||||
        if (!err) {
 | 
			
		||||
            callback(data);
 | 
			
		||||
        } else {
 | 
			
		||||
            console.log("fatal error pulling sql file")
 | 
			
		||||
@ -480,13 +480,11 @@ function build_where(req, c, w, d, args) {
 | 
			
		||||
                d = d + 1;
 | 
			
		||||
            }
 | 
			
		||||
            w = w + ")";
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
        } else {
 | 
			
		||||
            w = w + i + " = '" + req.body.scenario[i] + "'";
 | 
			
		||||
        }
 | 
			
		||||
        args.push(req.body.scenario[i]);
 | 
			
		||||
        c = c + 1;
 | 
			
		||||
    }
 | 
			
		||||
    ;
 | 
			
		||||
    };
 | 
			
		||||
    return { c, w, d };
 | 
			
		||||
}
 | 
			
		||||
@ -1,21 +1,37 @@
 | 
			
		||||
WITH
 | 
			
		||||
list AS (
 | 
			
		||||
list AS materialized (
 | 
			
		||||
SELECT
 | 
			
		||||
    iterdef->>'user' "user",
 | 
			
		||||
    iterdef->>'stamp' "stamp",
 | 
			
		||||
    iterdef->>'mesasage' "comment",
 | 
			
		||||
    round(SUM(fb_val_loc * r_rate)::numeric,2) sales,
 | 
			
		||||
    jsonb_pretty(iterdef) def
 | 
			
		||||
    l.doc->>'user' "user",
 | 
			
		||||
    jsonb_path_query_first(l.doc,'$.scenario.quota_rep_descr')->>0 quota_rep_descr,
 | 
			
		||||
    to_char((l.doc->>'stamp')::timestamptz,'YYYY-MM-DD HH:MI:SS') "stamp",
 | 
			
		||||
    l.doc->>'message' "comment",
 | 
			
		||||
    jsonb_pretty(l.doc) def,
 | 
			
		||||
    l.id
 | 
			
		||||
FROM
 | 
			
		||||
    rlarp.osm_fcpool
 | 
			
		||||
    rlarp.osm_log l
 | 
			
		||||
WHERE
 | 
			
		||||
    iterdef IS NOT NULL
 | 
			
		||||
    AND iterdef @> $$replace_user$$::jsonb
 | 
			
		||||
GROUP BY
 | 
			
		||||
    iterdef->>'user',
 | 
			
		||||
    iterdef->>'stamp',
 | 
			
		||||
    iterdef->>'message',
 | 
			
		||||
    iterdef
 | 
			
		||||
    l.doc @? '$.scenario.quota_rep_descr ? (@ == replace_user)'
 | 
			
		||||
)
 | 
			
		||||
,agg as (
 | 
			
		||||
SELECT 
 | 
			
		||||
    list.user
 | 
			
		||||
    ,list.quota_rep_descr
 | 
			
		||||
    ,list.stamp
 | 
			
		||||
    ,list.comment
 | 
			
		||||
    ,list.def
 | 
			
		||||
    ,list.id
 | 
			
		||||
    ,to_char(round(sum(value_usd),2),'$999,999,999D00') sales
 | 
			
		||||
from
 | 
			
		||||
    LIST
 | 
			
		||||
    inner join rlarp.osm_pool on
 | 
			
		||||
        id = logid
 | 
			
		||||
group BY    
 | 
			
		||||
    list.user
 | 
			
		||||
    ,list.quota_rep_descr
 | 
			
		||||
    ,list.stamp
 | 
			
		||||
    ,list.comment
 | 
			
		||||
    ,list.def
 | 
			
		||||
    ,list.id
 | 
			
		||||
)
 | 
			
		||||
SELECT
 | 
			
		||||
    jsonb_agg(row_to_json(list)::jsonb) x from list
 | 
			
		||||
    jsonb_agg(row_to_json(agg)::jsonb ORDER BY agg.stamp desc) x from agg
 | 
			
		||||
@ -13,6 +13,7 @@ target AS (select $$replace_request$$::json def)
 | 
			
		||||
        ,to_char(N1FSYP,'FM0000') FSPR
 | 
			
		||||
        ,N1SD01 SDAT
 | 
			
		||||
        ,N1ED01 EDAT
 | 
			
		||||
        ,daterange(n1sd01, n1ed01) drange
 | 
			
		||||
        ,to_char(N1ED01,'yymm') CAPR
 | 
			
		||||
        ,N1ED01 - N1SD01 +1 NDAYS
 | 
			
		||||
        ,CASE WHEN EXTRACT(MONTH FROM N1ED01) >= 6 THEN EXTRACT(YEAR FROM N1ED01) + 1 ELSE EXTRACT(YEAR FROM N1ED01) END SSYR
 | 
			
		||||
@ -30,18 +31,18 @@ target AS (select $$replace_request$$::json def)
 | 
			
		||||
    SELECT * FROM
 | 
			
		||||
    (
 | 
			
		||||
        VALUES
 | 
			
		||||
        ('Jun',1,6,-1)
 | 
			
		||||
        ,('Jul',2,7,-1)
 | 
			
		||||
        ,('Aug',3,8,-1)
 | 
			
		||||
        ,('Sep',4,9,-1)
 | 
			
		||||
        ,('Oct',5,10,-1)
 | 
			
		||||
        ,('Nov',6,11,-1)
 | 
			
		||||
        ,('Dec',7,12,-1)
 | 
			
		||||
        ,('Jan',8,1,0)
 | 
			
		||||
        ,('Feb',9,2,0)
 | 
			
		||||
        ,('Mar',10,3,0)
 | 
			
		||||
        ,('Apr',11,4,0)
 | 
			
		||||
        ,('May',12,5,0)
 | 
			
		||||
        ('01 - Jun',1,6,-1)
 | 
			
		||||
        ,('02 - Jul',2,7,-1)
 | 
			
		||||
        ,('03 - Aug',3,8,-1)
 | 
			
		||||
        ,('04 - Sep',4,9,-1)
 | 
			
		||||
        ,('05 - Oct',5,10,-1)
 | 
			
		||||
        ,('06 - Nov',6,11,-1)
 | 
			
		||||
        ,('07 - Dec',7,12,-1)
 | 
			
		||||
        ,('08 - Jan',8,1,0)
 | 
			
		||||
        ,('09 - Feb',9,2,0)
 | 
			
		||||
        ,('10 - Mar',10,3,0)
 | 
			
		||||
        ,('11 - Apr',11,4,0)
 | 
			
		||||
        ,('12 - May',12,5,0)
 | 
			
		||||
    ) x(m,s,cal,yr)
 | 
			
		||||
)
 | 
			
		||||
,SEG AS (
 | 
			
		||||
@ -67,30 +68,6 @@ target AS (select $$replace_request$$::json def)
 | 
			
		||||
            ('9TO','Other')
 | 
			
		||||
        ) X(GLEC, SEGM)
 | 
			
		||||
)
 | 
			
		||||
,MG AS (
 | 
			
		||||
    SELECT  
 | 
			
		||||
        X.F1, X.MING, X.GRP
 | 
			
		||||
    FROM 
 | 
			
		||||
        (
 | 
			
		||||
            VALUES
 | 
			
		||||
            ('L','000','Branded'),
 | 
			
		||||
            ('L','B10','Branded'),
 | 
			
		||||
            ('L','B11','Branded'),
 | 
			
		||||
            ('L','B52','Branded'),
 | 
			
		||||
            ('L','C10','Branded'),
 | 
			
		||||
            ('L','D12','Branded'),
 | 
			
		||||
            ('L','M11','Branded'),
 | 
			
		||||
            ('L','P12','Branded'),
 | 
			
		||||
            ('L','P13','Branded'),
 | 
			
		||||
            ('L','S10','Branded'),
 | 
			
		||||
            ('L','Y10','Branded'),
 | 
			
		||||
            ('L','Y11','Branded'),
 | 
			
		||||
            ('L','Y12','Branded'),
 | 
			
		||||
            ('P','B10','Branded'),
 | 
			
		||||
            ('P','B11','Branded'),
 | 
			
		||||
            ('P','B52','Branded')
 | 
			
		||||
        ) AS X (F1, MING, GRP)
 | 
			
		||||
)
 | 
			
		||||
,REPC AS (
 | 
			
		||||
    SELECT
 | 
			
		||||
        LTRIM(RTRIM(C.A9)) RCODE
 | 
			
		||||
@ -103,46 +80,6 @@ target AS (select $$replace_request$$::json def)
 | 
			
		||||
    WHERE
 | 
			
		||||
        C.A2 = 'MM'
 | 
			
		||||
)
 | 
			
		||||
--MOLD DESCRIPTIONS
 | 
			
		||||
,MD AS (
 | 
			
		||||
    SELECT
 | 
			
		||||
        U.MOLD
 | 
			
		||||
        ,MAX(U.DESCR) DESCR
 | 
			
		||||
    FROM
 | 
			
		||||
        (
 | 
			
		||||
            SELECT
 | 
			
		||||
                SUBSTR(M.AVPART,1,8) MOLD
 | 
			
		||||
                ,MAX(M.AVDES1) DESCR
 | 
			
		||||
            FROM
 | 
			
		||||
                LGDAT.STKMM M
 | 
			
		||||
            WHERE   
 | 
			
		||||
                LENGTH(M.AVPART) > 8
 | 
			
		||||
                AND SUBSTR(M.AVGLED,1,1) <= '2'
 | 
			
		||||
            GROUP BY
 | 
			
		||||
                SUBSTR(M.AVPART,1,8)
 | 
			
		||||
            UNION ALL
 | 
			
		||||
            SELECT
 | 
			
		||||
                SUBSTR(P.AWPART,1,8) MOLD
 | 
			
		||||
                ,MAX(P.AWDES1) DESCR
 | 
			
		||||
            FROM
 | 
			
		||||
                LGDAT.STKMP P
 | 
			
		||||
            WHERE   
 | 
			
		||||
                LENGTH(P.AWPART) > 8
 | 
			
		||||
                AND SUBSTR(P.AWGLED,1,1) <= '2'
 | 
			
		||||
            GROUP BY
 | 
			
		||||
                SUBSTR(P.AWPART,1,8)
 | 
			
		||||
        ) U
 | 
			
		||||
    GROUP BY
 | 
			
		||||
        U.MOLD
 | 
			
		||||
)
 | 
			
		||||
----------------------------------------------------sales major codes----------------------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
,SJ AS (
 | 
			
		||||
    SELECT * FROM LGDAT.MMSL WHERE COALESCE(BSMNCD,'') = ''
 | 
			
		||||
)
 | 
			
		||||
----------------------------------------------------sales minor codes----------------------------------------------------------------------------------------------------------------------------------
 | 
			
		||||
,SI AS (
 | 
			
		||||
    SELECT * FROM LGDAT.MMSL WHERE COALESCE(BSMNCD,'') <> ''
 | 
			
		||||
)
 | 
			
		||||
,copr AS (
 | 
			
		||||
    SELECT
 | 
			
		||||
        LTRIM(RTRIM(A9)) AS COMP,
 | 
			
		||||
@ -169,12 +106,12 @@ target AS (select $$replace_request$$::json def)
 | 
			
		||||
        ,terms
 | 
			
		||||
        ,order_month
 | 
			
		||||
        ,mseq.s seq
 | 
			
		||||
        ,orderdate
 | 
			
		||||
        ,requestdate
 | 
			
		||||
        ,shipdate
 | 
			
		||||
        ,order_date
 | 
			
		||||
        ,request_date
 | 
			
		||||
        ,ship_date
 | 
			
		||||
        ,sum(value_usd) value_usd
 | 
			
		||||
    FROM
 | 
			
		||||
        rlarp.osm_fcpool
 | 
			
		||||
        rlarp.osm_pool
 | 
			
		||||
        LEFT OUTER JOIN mseq ON
 | 
			
		||||
            mseq.m = order_month
 | 
			
		||||
    WHERE
 | 
			
		||||
@ -183,50 +120,52 @@ target AS (select $$replace_request$$::json def)
 | 
			
		||||
        --probably dont want to include adjustments that have blown away volume and good sources of dating info
 | 
			
		||||
        -----------------additional params-------------------
 | 
			
		||||
        AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
 | 
			
		||||
        AND adj_orderdate <= adj_shipdate
 | 
			
		||||
        AND order_date <= ship_date
 | 
			
		||||
    GROUP BY
 | 
			
		||||
        promo
 | 
			
		||||
        ,terms
 | 
			
		||||
        ,order_month
 | 
			
		||||
        ,mseq.s
 | 
			
		||||
        ,orderdate
 | 
			
		||||
        ,requestdate
 | 
			
		||||
        ,shipdate
 | 
			
		||||
        ,order_date
 | 
			
		||||
        ,request_date
 | 
			
		||||
        ,ship_date
 | 
			
		||||
    HAVING
 | 
			
		||||
        sum(value_usd) <> 0
 | 
			
		||||
)
 | 
			
		||||
--select * from alldates
 | 
			
		||||
,dom AS (
 | 
			
		||||
    SELECT
 | 
			
		||||
        extract(day FROM orderdate) DOM
 | 
			
		||||
        extract(day FROM order_date) DOM
 | 
			
		||||
        ,sum(value_usd) value_usd
 | 
			
		||||
    FROM
 | 
			
		||||
        alldates
 | 
			
		||||
    GROUP BY
 | 
			
		||||
        extract(day FROM orderdate)
 | 
			
		||||
        extract(day FROM order_date)
 | 
			
		||||
)
 | 
			
		||||
--select * from dom
 | 
			
		||||
---------------------may want ot look at a top-5 mix solution in the future facilitated by sum() over (order by sales desc)---------------
 | 
			
		||||
,mmix AS (
 | 
			
		||||
    SELECT
 | 
			
		||||
        to_char(orderdate,'Mon') _month
 | 
			
		||||
        to_char(order_date,'Mon') _month
 | 
			
		||||
        ,seq
 | 
			
		||||
        ,promo
 | 
			
		||||
        ,sum(extract(day from orderdate)*value_usd) dom_wa
 | 
			
		||||
        --,requestdate-orderdate rlag
 | 
			
		||||
        ,sum((requestdate-orderdate)*(value_usd)) rlag_wa
 | 
			
		||||
        --,shipdate - requestdate slag
 | 
			
		||||
        ,sum((shipdate - requestdate)*(value_usd)) slag_wa
 | 
			
		||||
        ,sum(extract(day from order_date)*value_usd) dom_wa
 | 
			
		||||
        --,request_date-order_date rlag
 | 
			
		||||
        ,sum((request_date-order_date)*(value_usd)) rlag_wa
 | 
			
		||||
        --,ship_date - request_date slag
 | 
			
		||||
        ,sum((ship_date - request_date)*(value_usd)) slag_wa
 | 
			
		||||
        ,sum(value_usd) value_usd
 | 
			
		||||
    FROM
 | 
			
		||||
        alldates
 | 
			
		||||
    GROUP BY
 | 
			
		||||
        to_char(orderdate,'Mon')
 | 
			
		||||
        to_char(order_date,'Mon')
 | 
			
		||||
        ,seq
 | 
			
		||||
        ,promo
 | 
			
		||||
        --,extract(day from orderdate)
 | 
			
		||||
        --,requestdate-orderdate
 | 
			
		||||
        --,shipdate - requestdate
 | 
			
		||||
        --,extract(day from order_date)
 | 
			
		||||
        --,request_date-order_date
 | 
			
		||||
        --,ship_date - request_date
 | 
			
		||||
)
 | 
			
		||||
--select * from mmix
 | 
			
		||||
,targm AS (
 | 
			
		||||
    SELECT
 | 
			
		||||
        je.key as month
 | 
			
		||||
@ -242,6 +181,7 @@ target AS (select $$replace_request$$::json def)
 | 
			
		||||
        LEFT OUTER JOIN mseq ON
 | 
			
		||||
            mseq.m = je.key
 | 
			
		||||
)
 | 
			
		||||
--select * from targm
 | 
			
		||||
,mmixp AS (
 | 
			
		||||
    SELECT
 | 
			
		||||
        _month
 | 
			
		||||
@ -255,6 +195,7 @@ target AS (select $$replace_request$$::json def)
 | 
			
		||||
    FROM
 | 
			
		||||
        mmix
 | 
			
		||||
)
 | 
			
		||||
--select * from mmixp 
 | 
			
		||||
--month cross join mix
 | 
			
		||||
,mxm AS (
 | 
			
		||||
SELECT
 | 
			
		||||
@ -286,114 +227,24 @@ FROM
 | 
			
		||||
--this basemix is probably join going to be part-bill-ship with all master data joined later since it is not known if any original is salvaged
 | 
			
		||||
,basemix AS (
 | 
			
		||||
SELECT
 | 
			
		||||
        null::text plnt          ---master data 
 | 
			
		||||
        ,0::numeric(11,0) "ddord#"
 | 
			
		||||
        ,0::numeric(11,0) "dditm#"
 | 
			
		||||
        ,0::numeric(11,0) "fgbol#"
 | 
			
		||||
        ,0::numeric(11,0) "fgent#"
 | 
			
		||||
        ,0::numeric(9,0) "diinv#"
 | 
			
		||||
        ,0::numeric(3,0) "dilin#"
 | 
			
		||||
        ,mxm.promo          --history 
 | 
			
		||||
        ,null::text return_reas
 | 
			
		||||
        ,null::text terms
 | 
			
		||||
        ,''::text custpo
 | 
			
		||||
        ,'I' dhincr
 | 
			
		||||
        ,null::numeric diext
 | 
			
		||||
        ,null::numeric ditdis
 | 
			
		||||
        ,null::date dcodat
 | 
			
		||||
        ,null::date ddqdat
 | 
			
		||||
        ,null::date dcmdat
 | 
			
		||||
        ,null::date dhidat
 | 
			
		||||
        ,sd.fspr
 | 
			
		||||
        ,null::text remit_to
 | 
			
		||||
        ,null::text bill_class
 | 
			
		||||
        ,(regexp_match(jr.bill_cust_descr,'(.*?)(?= - |$)'))[1] bill_cust
 | 
			
		||||
        ,null:: text bill_rep
 | 
			
		||||
        ,null::text bill_terr
 | 
			
		||||
        ,null::text ship_class
 | 
			
		||||
        ,(regexp_match(jr.ship_cust_descr,'(.*?)(?= - |$)'))[1] ship_cust
 | 
			
		||||
        ,null::text ship_rep
 | 
			
		||||
        ,null::text ship_terr
 | 
			
		||||
        ,null::text quota_rep
 | 
			
		||||
        ,null::text account
 | 
			
		||||
        ,null::text shipgrp
 | 
			
		||||
        ,null::text geo
 | 
			
		||||
        ,null::text chan
 | 
			
		||||
        ,null::text orig_ctry
 | 
			
		||||
        ,null::text orig_prov
 | 
			
		||||
        ,null::text orig_post
 | 
			
		||||
        ,null::text dest_ctry
 | 
			
		||||
        ,null::text dest_prov
 | 
			
		||||
        ,null::text dest_post
 | 
			
		||||
        ,(regexp_match(jr.part_descr,'(.*?)(?= - |$)'))[1] part
 | 
			
		||||
        ,null::text ord_gldc
 | 
			
		||||
        ,null::text majg
 | 
			
		||||
        ,null::text ming
 | 
			
		||||
        ,null::text majs
 | 
			
		||||
        ,null::text mins
 | 
			
		||||
        ,null::text gldc
 | 
			
		||||
        ,null::text glec
 | 
			
		||||
        ,null::text harm
 | 
			
		||||
        ,null::text clss
 | 
			
		||||
        ,null::text brand
 | 
			
		||||
        ,null::text assc
 | 
			
		||||
        ,'41010'::text fs_line
 | 
			
		||||
        ,null::text r_currency
 | 
			
		||||
        ,null::numeric r_rate
 | 
			
		||||
        ,null::text c_currency
 | 
			
		||||
        ,null::numeric c_rate
 | 
			
		||||
        ,0::numeric(15,5) ddqtoi
 | 
			
		||||
        ,0::numeric(15,5) ddqtsi
 | 
			
		||||
        ,0::numeric(15,5) fgqshp
 | 
			
		||||
        ,0::numeric(15,5) diqtsh
 | 
			
		||||
        ,mxm.qty*mxm.momix*jr.mix fb_qty          --history value
 | 
			
		||||
        ,0::numeric fb_cst_loc          --history part mix
 | 
			
		||||
        ,0::numeric fb_cst_loc_cur
 | 
			
		||||
        ,0::numeric fb_cst_loc_fut
 | 
			
		||||
        ,mxm.amount*mxm.momix*jr.mix fb_val_loc          --history value
 | 
			
		||||
        ,0::numeric fb_val_loc_pl
 | 
			
		||||
        ,''::text calc_status
 | 
			
		||||
        ,''::text flag
 | 
			
		||||
        ,make_date(mxm.yr + 2020,mxm.cal,mxm.odom) orderdate
 | 
			
		||||
        ,make_date(mxm.yr + 2020,mxm.cal,mxm.odom) + rlag requestdate
 | 
			
		||||
        ,make_date(mxm.yr + 2020,mxm.cal,mxm.odom) + rlag + slag shipdate
 | 
			
		||||
        ,make_date(mxm.yr + 2020,mxm.cal,mxm.odom) adj_orderdate
 | 
			
		||||
        ,make_date(mxm.yr + 2020,mxm.cal,mxm.odom) + rlag adj_requestdate
 | 
			
		||||
        ,make_date(mxm.yr + 2020,mxm.cal,mxm.odom) + rlag + slag adj_shipdate
 | 
			
		||||
        ,'replace_version' "version"
 | 
			
		||||
        ,'replace_source'||' volume'  iter
 | 
			
		||||
        -----------------------ui columns--------------------------------
 | 
			
		||||
        ,'replace_iterdet' iterdet
 | 
			
		||||
        ,$$replace_iterdef$$::json iterdef
 | 
			
		||||
        ,od.ssyr order_season
 | 
			
		||||
        ,to_char(make_date(mxm.yr + 2020,mxm.cal,mxm.odom),'Mon') order_month
 | 
			
		||||
        ,sd.ssyr ship_season
 | 
			
		||||
        ,to_char(make_date(mxm.yr + 2020,mxm.cal,mxm.odom) + rlag + slag,'Mon') ship_month
 | 
			
		||||
        ,rd.ssyr request_season
 | 
			
		||||
        ,to_char(make_date(mxm.yr + 2020,mxm.cal,mxm.odom) + rlag,'Mon')  request_month
 | 
			
		||||
        ,jr.part_descr part_descr
 | 
			
		||||
        ,null::text part_family
 | 
			
		||||
        ,null::text part_group
 | 
			
		||||
        ,null::text branding
 | 
			
		||||
        ,null::text color
 | 
			
		||||
        ,null::text segm
 | 
			
		||||
        sd.fspr
 | 
			
		||||
        ,mxm.promo
 | 
			
		||||
        ,jr.bill_cust_descr
 | 
			
		||||
        ,null::text billto_group
 | 
			
		||||
        ,jr.ship_cust_descr
 | 
			
		||||
        ,null::text shipto_group
 | 
			
		||||
        ,null::text majg_descr
 | 
			
		||||
        ,null::text ming_descr
 | 
			
		||||
        ,null::text majs_descr
 | 
			
		||||
        ,null::text mins_descr
 | 
			
		||||
        ,null::text mod_chan
 | 
			
		||||
        ,null::text mod_chansub
 | 
			
		||||
        ,null::text quota_rep_descr
 | 
			
		||||
        ,null::text director_descr
 | 
			
		||||
        ,null::numeric value_loc
 | 
			
		||||
        ,null::numeric value_usd
 | 
			
		||||
        ,null::numeric cost_loc
 | 
			
		||||
        ,null::numeric cost_usd
 | 
			
		||||
        ,null::numeric units
 | 
			
		||||
        ,(regexp_match(jr.part_descr,'(.*?)(?= - |$)'))[1] part
 | 
			
		||||
        ,jr.part_descr
 | 
			
		||||
        ,substring(jr.part_descr,1,8) part_group
 | 
			
		||||
        ,mxm.qty*mxm.momix*jr.mix units
 | 
			
		||||
        ,mxm.amount*mxm.momix*jr.mix value_loc
 | 
			
		||||
        ,make_date(mxm.yr + 2021,mxm.cal,mxm.odom) order_date
 | 
			
		||||
        ,to_char(make_date(mxm.yr + 2021,mxm.cal,mxm.odom),'Mon') order_month
 | 
			
		||||
        ,od.ssyr order_season
 | 
			
		||||
        ,make_date(mxm.yr + 2021,mxm.cal,mxm.odom) + rlag request_date
 | 
			
		||||
        ,to_char(make_date(mxm.yr + 2021,mxm.cal,mxm.odom) + rlag,'Mon')  request_month
 | 
			
		||||
        ,rd.ssyr request_season
 | 
			
		||||
        ,make_date(mxm.yr + 2021,mxm.cal,mxm.odom) + rlag + slag ship_date
 | 
			
		||||
        ,to_char(make_date(mxm.yr + 2021,mxm.cal,mxm.odom) + rlag + slag,'Mon') ship_month
 | 
			
		||||
        ,sd.ssyr ship_season
 | 
			
		||||
        ,jr.mix
 | 
			
		||||
    FROM
 | 
			
		||||
        target
 | 
			
		||||
@ -401,387 +252,245 @@ SELECT
 | 
			
		||||
        JOIN LATERAL json_to_record(ae.e) as jr(part_descr text, bill_cust_descr text, ship_cust_descr text, mix numeric) ON true
 | 
			
		||||
        CROSS JOIN mxm
 | 
			
		||||
        LEFT OUTER JOIN gld od ON
 | 
			
		||||
            make_date(mxm.yr + 2020,mxm.cal,mxm.odom) BETWEEN od.sdat AND od.edat
 | 
			
		||||
            od.drange @> make_date(mxm.yr + 2021,mxm.cal,mxm.odom)
 | 
			
		||||
        LEFT OUTER JOIN gld rd ON
 | 
			
		||||
            make_date(mxm.yr + 2020,mxm.cal,mxm.odom) + rlag BETWEEN rd.sdat AND rd.edat
 | 
			
		||||
            rd.drange @> (make_date(mxm.yr + 2021,mxm.cal,mxm.odom) + rlag)
 | 
			
		||||
        LEFT OUTER JOIN gld sd ON
 | 
			
		||||
            make_date(mxm.yr + 2020,mxm.cal,mxm.odom) + rlag + slag BETWEEN sd.sdat AND sd.edat
 | 
			
		||||
            sd.drange @> (make_date(mxm.yr + 2021,mxm.cal,mxm.odom) + rlag + slag)
 | 
			
		||||
)
 | 
			
		||||
--SELECT * FROM basemix
 | 
			
		||||
,log AS (
 | 
			
		||||
    INSERT INTO rlarp.osm_log(doc) SELECT $$replace_iterdef$$::jsonb doc RETURNING *
 | 
			
		||||
)
 | 
			
		||||
,final AS (
 | 
			
		||||
SELECT
 | 
			
		||||
    COALESCE(m.avdplt,p.awdplt) plnt          --master data 
 | 
			
		||||
    ,b."ddord#"
 | 
			
		||||
    ,b."dditm#"
 | 
			
		||||
    ,b."fgbol#"
 | 
			
		||||
    ,b."fgent#"
 | 
			
		||||
    ,b."diinv#"
 | 
			
		||||
    ,b."dilin#"
 | 
			
		||||
    ,b.promo          --history 
 | 
			
		||||
    ,b.return_reas
 | 
			
		||||
    ,bc.bvterm terms          --history cust mix
 | 
			
		||||
    ,b.custpo
 | 
			
		||||
    ,b.dhincr
 | 
			
		||||
    ,b.diext
 | 
			
		||||
    ,b.ditdis
 | 
			
		||||
    ,b.dcodat
 | 
			
		||||
    ,b.ddqdat
 | 
			
		||||
    ,b.dcmdat
 | 
			
		||||
    ,b.dhidat
 | 
			
		||||
    ,b.fspr
 | 
			
		||||
    ,bc.bvcomp remit_to          --master data 
 | 
			
		||||
    ,bc.bvclas bill_class          --master data 
 | 
			
		||||
    ,b.bill_cust          --history cust mix
 | 
			
		||||
    ,bc.bvsalm bill_rep          --master data 
 | 
			
		||||
    ,bc.bvterr bill_terr          --master data 
 | 
			
		||||
    ,sc.bvclas ship_class          --master data 
 | 
			
		||||
    ,b.ship_cust          --history cust mix
 | 
			
		||||
    ,sc.bvsalm ship_rep          --master data 
 | 
			
		||||
    ,sc.bvterr ship_terr          --master data 
 | 
			
		||||
    --quota rep--------------------------------------------
 | 
			
		||||
    ,RTRIM(
 | 
			
		||||
        COALESCE(
 | 
			
		||||
            --retail items go to currep, or if null go to 90005
 | 
			
		||||
            CASE WHEN COALESCE(avgled,awgled) IN ('1RE','1CU') THEN
 | 
			
		||||
                CASE WHEN bc.bvctry = 'CAN' THEN
 | 
			
		||||
                    --Rachel Bowman
 | 
			
		||||
                    '50300'
 | 
			
		||||
                ELSE
 | 
			
		||||
                    --retail chain got to Mark Wilkinson
 | 
			
		||||
                    CASE COALESCE(cg.cgrp,bc.bvname)
 | 
			
		||||
                        WHEN 'THE HOME DEPOT' THEN '90005'
 | 
			
		||||
                        WHEN 'DO IT BEST' THEN '90005'
 | 
			
		||||
                        WHEN 'ACE HARDWARE' THEN '90005'
 | 
			
		||||
                        WHEN 'ALDI' THEN '90005'
 | 
			
		||||
                        WHEN 'AMAZON.COM' THEN '90005'
 | 
			
		||||
                        WHEN 'GARDEN RIDGE CORP' THEN '90005'
 | 
			
		||||
                        --all other retail goes to Doran Marable
 | 
			
		||||
                        ELSE '50200'
 | 
			
		||||
                    END
 | 
			
		||||
    b.fspr
 | 
			
		||||
    ,i.dplt plnt
 | 
			
		||||
    ,b.promo
 | 
			
		||||
    ,bc.bvterm terms
 | 
			
		||||
    ,b.bill_cust_descr
 | 
			
		||||
    ,b.ship_cust_descr
 | 
			
		||||
    ,(SELECT rcode FROM repc WHERE repp = log.doc->'scenario'->>'quota_rep_descr') dsm
 | 
			
		||||
    ,log.doc->'scenario'->>'quota_rep_descr' quota_rep_descr
 | 
			
		||||
    ,(SELECT director FROM repc WHERE repp = log.doc->'scenario'->>'quota_rep_descr') director
 | 
			
		||||
    ,CASE bc.BVADR6 WHEN '' THEN bc.BVNAME ELSE bc.BVADR6 END billto_group
 | 
			
		||||
    ,CASE sc.BVADR6 WHEN '' THEN sc.BVNAME ELSE bc.BVADR6 END shipto_group
 | 
			
		||||
    ,CASE SUBSTRING(bc.bvclas,2,3) 
 | 
			
		||||
        --if the bill to class is ditsributor, then it's either warehouse or drop
 | 
			
		||||
        WHEN 'DIS' THEN
 | 
			
		||||
            --if the ship-to is a different name than the bill-to then it's drop, otherwise it's warehouse
 | 
			
		||||
            CASE SUBSTRING(sc.bvclas,2,3)
 | 
			
		||||
                WHEN 'DIS' THEN 'WHS'
 | 
			
		||||
                ELSE 'DRP'
 | 
			
		||||
            END
 | 
			
		||||
            ELSE
 | 
			
		||||
                CASE WHEN COALESCE(avming,awming) = 'B52' THEN 
 | 
			
		||||
                    'PW'
 | 
			
		||||
                --gdir, ndir go to bill-to rep
 | 
			
		||||
                ELSE 
 | 
			
		||||
                    CASE WHEN bc.bvclas IN ('GDIR','NDIR') THEN 
 | 
			
		||||
                        bc.bvsalm
 | 
			
		||||
                    ELSE
 | 
			
		||||
                        sc.bvsalm
 | 
			
		||||
                    END
 | 
			
		||||
                END
 | 
			
		||||
            --CASE WHEN RTRIM(SUBSTRING(LTRIM(SC.BVADR7)||SC.BVNAME,1,30)) = RTRIM(SUBSTRING(LTRIM(BC.BVADR7)||BC.BVNAME,1,30)) THEN 'DIS' ELSE 'DRP' END
 | 
			
		||||
        --everything else does not involve a distributor and is considered direct
 | 
			
		||||
        ELSE 'DIR'
 | 
			
		||||
    END chan
 | 
			
		||||
    ,CASE SUBSTRING(bc.bvclas,2,3) 
 | 
			
		||||
        WHEN 'DIS' THEN
 | 
			
		||||
            --if the ship-to is a different name than the bill-to then it's drop, otherwise it's warehouse
 | 
			
		||||
            CASE SUBSTRING(sc.bvclas,2,3)
 | 
			
		||||
                WHEN 'DIS' THEN 'WHS'
 | 
			
		||||
                ELSE CASE SUBSTRING(sc.bvclas,1,1) WHEN 'R' THEN 'RDP' ELSE 'DRP' END
 | 
			
		||||
            END
 | 
			
		||||
            ,''
 | 
			
		||||
        )
 | 
			
		||||
    ) quota_rep
 | 
			
		||||
    ,coalesce(cg.cgrp,bc.bvname) account
 | 
			
		||||
    ,coalesce(sg.cgrp,sc.bvname) shipgrp
 | 
			
		||||
    ,coalesce(t.geo,'UNDEFINED') geo
 | 
			
		||||
    ,coalesce(c.chan,'UNDEFINED') chan
 | 
			
		||||
    ,ad.qzcryc orig_ctry
 | 
			
		||||
    ,ad.qzprov orig_prov
 | 
			
		||||
    ,ad.qzpost orig_post
 | 
			
		||||
    ,sc.bvctry dest_ctry
 | 
			
		||||
    ,sc.bvprcd dest_prov
 | 
			
		||||
    ,sc.bvpost dest_post
 | 
			
		||||
    ,b.part          --history part mix
 | 
			
		||||
    ,COALESCE(m.avglcd, p.awgldc) ord_gldc          --master data 
 | 
			
		||||
    ,COALESCE(m.avmajg,p.awmajg) majg          --master data 
 | 
			
		||||
    ,COALESCE(m.avming,p.awming) ming          --master data 
 | 
			
		||||
    ,COALESCE(m.avmajs,p.awmajs) majs          --master data 
 | 
			
		||||
    ,COALESCE(m.avmins,p.awmins) mins          --master data 
 | 
			
		||||
    ,COALESCE(m.avglcd,p.awgldc) gldc          --master data 
 | 
			
		||||
    ,COALESCE(m.avgled,p.awgled) glec          --master data 
 | 
			
		||||
    ,COALESCE(m.avharm,p.awharm) harm          --master data 
 | 
			
		||||
    ,COALESCE(m.avclss,p.awclss) clss          --master data 
 | 
			
		||||
    ,SUBSTR(COALESCE(m."avcpt#",p."awvpt#"),1,1) brand          --master data 
 | 
			
		||||
    ,COALESCE(m.avassc,p.awassc) assc          --master data 
 | 
			
		||||
    ,b.fs_line          --master data 
 | 
			
		||||
        WHEN 'MAS' THEN 'RMN'
 | 
			
		||||
        WHEN 'NAT' THEN 'RMN'
 | 
			
		||||
        ELSE CASE SUBSTRING(sc.bvclas,1,1) WHEN 'R' THEN 'RDI' ELSE 'DIR' END
 | 
			
		||||
    END chansub
 | 
			
		||||
    ,null::text chan_retail
 | 
			
		||||
    ,b.part
 | 
			
		||||
    ,b.part_descr
 | 
			
		||||
    ,b.part_group
 | 
			
		||||
    ,i.branding
 | 
			
		||||
    ,i.majg||' - '||i.majgd majg_descr
 | 
			
		||||
    ,i.ming||' - '||i.mingd ming_descr
 | 
			
		||||
    ,i.majs||' - '||i.majsd majs_descr
 | 
			
		||||
    ,i.mins||' - '||i.minsd mins_descr
 | 
			
		||||
    ,seg.segm
 | 
			
		||||
    ,'41010' fs_line          --master data
 | 
			
		||||
    ,bc.bvcurr r_currency          --history cust mix
 | 
			
		||||
    ,rx.rate r_rate          --master data
 | 
			
		||||
    ,copr.curr c_currency          --master data
 | 
			
		||||
    ,cx.rate c_rate          --master data
 | 
			
		||||
    ,b.ddqtoi
 | 
			
		||||
    ,b.ddqtsi
 | 
			
		||||
    ,b.fgqshp
 | 
			
		||||
    ,b.diqtsh
 | 
			
		||||
    ,b.fb_qty
 | 
			
		||||
    ,COALESCE(im.cgstcs,ip.chstcs, ir.y0stcs)*b.fb_qty fb_cst_loc
 | 
			
		||||
    ,COALESCE(im.cgstcs,ip.chstcs, ir.y0stcs)*b.fb_qty fb_cst_loc_cur
 | 
			
		||||
    ,COALESCE(im.cgstcs,ip.chstcs, ir.y0stcs)*b.fb_qty fb_cst_loc_fut
 | 
			
		||||
    ,b.fb_val_loc
 | 
			
		||||
    ,b.fb_val_loc_pl
 | 
			
		||||
    ,b.calc_status
 | 
			
		||||
    ,b.flag
 | 
			
		||||
    ,b.orderdate
 | 
			
		||||
    ,b.requestdate
 | 
			
		||||
    ,b.shipdate
 | 
			
		||||
    ,b.adj_orderdate
 | 
			
		||||
    ,b.adj_requestdate
 | 
			
		||||
    ,b.adj_shipdate
 | 
			
		||||
    ,b."version"
 | 
			
		||||
    ,b.iter
 | 
			
		||||
    -----------------------ui columns--------------------------------
 | 
			
		||||
    ,b.iterdet
 | 
			
		||||
    ,b.iterdef
 | 
			
		||||
    ,b.order_season
 | 
			
		||||
    ,b.units
 | 
			
		||||
    ,b.value_loc
 | 
			
		||||
    ,b.value_loc * rx.rate value_usd
 | 
			
		||||
    ,COALESCE(im.cgstcs,ip.chstcs, ir.y0stcs)*b.units cost_loc
 | 
			
		||||
    ,COALESCE(im.cgstcs,ip.chstcs, ir.y0stcs)*b.units*cx.rate cost_loc
 | 
			
		||||
    ,'CLOSED' calc_status
 | 
			
		||||
    ,'SHIPMENT' flag
 | 
			
		||||
    ,b.order_date
 | 
			
		||||
    ,b.order_month
 | 
			
		||||
    ,b.ship_season
 | 
			
		||||
    ,b.ship_month
 | 
			
		||||
    ,b.request_season
 | 
			
		||||
    ,b.order_season
 | 
			
		||||
    ,b.request_date
 | 
			
		||||
    ,b.request_month
 | 
			
		||||
    ,b.part_descr
 | 
			
		||||
    ,SUBSTR(b.part,1,3)||coalesce(' - '||F.DESCR,'') part_family
 | 
			
		||||
    ,SUBSTRING(b.part,1,8)||coalesce(' - '||MD.DESCR,'') part_group
 | 
			
		||||
    ,COALESCE(MG.GRP,'Unbranded') branding
 | 
			
		||||
    ,CASE WHEN substring(COALESCE(m.avgled, p.awgled),1,1) <= '2' THEN SUBSTRING(b.part,9,3) ELSE '' END color
 | 
			
		||||
    ,COALESCE(SEG.SEGM,'Other') segm
 | 
			
		||||
    ,b.bill_cust_descr
 | 
			
		||||
    ,coalesce(cg.cgrp,bc.bvname) billto_group
 | 
			
		||||
    ,b.ship_cust_descr
 | 
			
		||||
    ,coalesce(sg.cgrp,sc.bvname) shipto_group
 | 
			
		||||
    ,COALESCE(m.avmajg,p.awmajg)||COALESCE(' - '||BQDES,'') majg_descr
 | 
			
		||||
    ,COALESCE(m.avming,p.awming)||COALESCE(' - '||BRDES,'') ming_descr
 | 
			
		||||
    ,COALESCE(m.avmajs,p.awmajs)||COALESCE(' - '||SJ.BSDES1,'') majs_descr
 | 
			
		||||
    ,COALESCE(m.avmins,p.awmins)||COALESCE(' - '||SI.BSDES1,'') mins_descr
 | 
			
		||||
    ,CASE COALESCE(SEG.SEGM,'Other')
 | 
			
		||||
        WHEN 'Retail' THEN c.RETAIL
 | 
			
		||||
        ELSE coalesce(c.chan,'UNDEFINED')
 | 
			
		||||
    END mod_chan
 | 
			
		||||
    ,CASE COALESCE(SEG.SEGM,'Other')
 | 
			
		||||
        WHEN 'Retail' THEN c.RETAILSUB
 | 
			
		||||
        ELSE ''
 | 
			
		||||
    END mod_chansub
 | 
			
		||||
    ,repc.repp quota_rep_descr
 | 
			
		||||
    ,repc.director director_descr
 | 
			
		||||
    ,b.fb_val_loc value_loc
 | 
			
		||||
    ,b.fb_val_loc * rx.rate value_usd
 | 
			
		||||
    ,COALESCE(im.cgstcs,ip.chstcs, ir.y0stcs)*b.fb_qty cost_loc
 | 
			
		||||
    ,COALESCE(im.cgstcs,ip.chstcs, ir.y0stcs)*b.fb_qty*cx.rate cost_usd
 | 
			
		||||
    ,b.fb_qty units
 | 
			
		||||
    ,b.request_season
 | 
			
		||||
    ,b.ship_date
 | 
			
		||||
    ,b.ship_month
 | 
			
		||||
    ,b.ship_season
 | 
			
		||||
    ,'replace_version' "version"
 | 
			
		||||
    ,'replace_source'||' volume'  iter
 | 
			
		||||
    ,log.id
 | 
			
		||||
    ,log.doc->>'comment' "comment"
 | 
			
		||||
    ,log.doc->>'type' module
 | 
			
		||||
FROM
 | 
			
		||||
    basemix b
 | 
			
		||||
    LEFT OUTER JOIN LGDAT.STKMM M ON
 | 
			
		||||
        M.AVPART = b.PART
 | 
			
		||||
    LEFT OUTER JOIN LGDAT.STKMP P ON
 | 
			
		||||
        P.AWPART = b.PART
 | 
			
		||||
    LEFT OUTER JOIN lgdat.stka a ON
 | 
			
		||||
        v6part = b.part
 | 
			
		||||
        AND v6plnt = COALESCE(m.avdplt,p.awdplt)
 | 
			
		||||
    CROSS JOIN log
 | 
			
		||||
    LEFT OUTER JOIN rlarp.itemmv i ON
 | 
			
		||||
        i.item = b.part
 | 
			
		||||
    LEFT OUTER JOIN SEG ON
 | 
			
		||||
        SEG.GLEC = COALESCE(m.avgled,p.awgled)
 | 
			
		||||
        SEG.GLEC = i.glec
 | 
			
		||||
        --AND SEG.SEGM <> 'Other'
 | 
			
		||||
    LEFT OUTER JOIN MG ON   
 | 
			
		||||
        MG.F1 = SUBSTR(b.PART,16,1)
 | 
			
		||||
        AND MG.MING = COALESCE(m.avming,p.awming)
 | 
			
		||||
    LEFT OUTER JOIN RLARP.FAMILY F ON
 | 
			
		||||
        F.F3 = SUBSTR(b.PART,1,3)
 | 
			
		||||
    LEFT OUTER JOIN MD ON
 | 
			
		||||
        MD.MOLD = SUBSTR(b.PART,1,8)
 | 
			
		||||
    LEFT OUTER JOIN LGDAT.CUST BC ON
 | 
			
		||||
        BC.BVCUST = b.BILL_CUST
 | 
			
		||||
        BC.BVCUST = rtrim(substring(b.bill_cust_descr,1,8))
 | 
			
		||||
    LEFT OUTER JOIN LGDAT.CUST SC ON
 | 
			
		||||
        SC.BVCUST = b.SHIP_CUST
 | 
			
		||||
    LEFT OUTER JOIN RLARP.FFCHNL c ON
 | 
			
		||||
        c.BILL = bc.bvclas
 | 
			
		||||
        AND c.SHIP = sc.bvclas
 | 
			
		||||
    LEFT OUTER JOIN rlarp.ffterr t ON
 | 
			
		||||
            t.prov = sc.bvprcd AND
 | 
			
		||||
            t.ctry = sc.bvctry
 | 
			
		||||
    LEFT OUTER JOIN RLARP.FFCUST CG ON
 | 
			
		||||
        CG.CUSTN = BC.BVCUST
 | 
			
		||||
    LEFT OUTER JOIN RLARP.FFCUST SG ON
 | 
			
		||||
        SG.CUSTN = SC.BVCUST
 | 
			
		||||
        SC.BVCUST = rtrim(substring(b.ship_cust_descr,1,8))
 | 
			
		||||
    LEFT OUTER JOIN REPC ON
 | 
			
		||||
        REPC.RCODE = RTRIM( 
 | 
			
		||||
        COALESCE(
 | 
			
		||||
            --retail items go to currep, or if null go to 90005
 | 
			
		||||
            CASE WHEN COALESCE(avgled,awgled) IN ('1RE','1CU') THEN
 | 
			
		||||
                CASE WHEN bc.bvctry = 'CAN' THEN
 | 
			
		||||
                    --Rachel Bowman
 | 
			
		||||
                    '50300'
 | 
			
		||||
                ELSE
 | 
			
		||||
                    --retail chain got to Mark Wilkinson
 | 
			
		||||
                    CASE COALESCE(cg.cgrp,bc.bvname)
 | 
			
		||||
                        WHEN 'THE HOME DEPOT' THEN '90005'
 | 
			
		||||
                        WHEN 'DO IT BEST' THEN '90005'
 | 
			
		||||
                        WHEN 'ACE HARDWARE' THEN '90005'
 | 
			
		||||
                        WHEN 'ALDI' THEN '90005'
 | 
			
		||||
                        WHEN 'AMAZON.COM' THEN '90005'
 | 
			
		||||
                        WHEN 'GARDEN RIDGE CORP' THEN '90005'
 | 
			
		||||
                        --all other retail goes to Doran Marable
 | 
			
		||||
                        ELSE '50200'
 | 
			
		||||
                    END
 | 
			
		||||
            END
 | 
			
		||||
            ELSE
 | 
			
		||||
                CASE WHEN COALESCE(avming,awming) = 'B52' THEN 
 | 
			
		||||
                    'PW'
 | 
			
		||||
                --gdir, ndir go to bill-to rep
 | 
			
		||||
                ELSE 
 | 
			
		||||
                    CASE WHEN bc.bvclas IN ('GDIR','NDIR') THEN 
 | 
			
		||||
                        bc.bvsalm
 | 
			
		||||
                    ELSE
 | 
			
		||||
                        sc.bvsalm
 | 
			
		||||
                    END
 | 
			
		||||
                END
 | 
			
		||||
            END
 | 
			
		||||
            ,''
 | 
			
		||||
        )
 | 
			
		||||
    )
 | 
			
		||||
    LEFT OUTER JOIN SI ON
 | 
			
		||||
        SI.BSMJCD = COALESCE(m.avmajs,p.awmajs)
 | 
			
		||||
        AND SI.BSMNCD = COALESCE(m.avmins,p.awmins)
 | 
			
		||||
    LEFT OUTER JOIN SJ ON
 | 
			
		||||
        SJ.BSMJCD = COALESCE(m.avmajs,p.awmajs)
 | 
			
		||||
    LEFT OUTER JOIN LGDAT.MAJG ON
 | 
			
		||||
        BQGRP = COALESCE(m.avmajg,p.awmajg)
 | 
			
		||||
    LEFT OUTER JOIN LGDAT.MMGP ON
 | 
			
		||||
        BRMGRP = COALESCE(m.avming,p.awming)
 | 
			
		||||
        AND BRGRP = COALESCE(m.avmajg,p.awmajg)
 | 
			
		||||
                        --retail items go to currep, or if null go to 90005
 | 
			
		||||
                        CASE WHEN i.glec IN ('1RE','1CU') THEN
 | 
			
		||||
                            CASE WHEN bc.bvctry = 'CAN' THEN
 | 
			
		||||
                                --Rachel Bowman
 | 
			
		||||
                                '50300'
 | 
			
		||||
                            ELSE
 | 
			
		||||
                                --select customers go to select reps
 | 
			
		||||
                                CASE CASE bc.BVADR6 WHEN '' THEN bc.BVNAME ELSE bc.BVADR6 END
 | 
			
		||||
                                    ------Alecia Latini-------------------------------
 | 
			
		||||
                                    WHEN 'DO IT BEST' THEN '90006'
 | 
			
		||||
                                    WHEN 'ACE HARDWARE' THEN '90006'
 | 
			
		||||
                                    WHEN 'ALDI' THEN '90006'
 | 
			
		||||
                                    WHEN 'AMAZON.COM' THEN '90006'
 | 
			
		||||
                                    WHEN 'GARDEN RIDGE CORP' THEN '90006' --AKA "At Home"
 | 
			
		||||
                                    WHEN 'TRUE VALUE' THEN '90006'
 | 
			
		||||
                                    WHEN 'WAYFAIR' THEN '90006'
 | 
			
		||||
                                    WHEN 'GRIFFIN' THEN '90006'
 | 
			
		||||
                                    WHEN 'WAL-MART' THEN '90006'
 | 
			
		||||
                                    ------Tony Landino--------------------------------
 | 
			
		||||
                                    WHEN 'THE HOME DEPOT' THEN '50802'
 | 
			
		||||
                                    WHEN 'FRED MEYER' THEN '50802'
 | 
			
		||||
                                    WHEN 'MENARDS' THEN '50802'
 | 
			
		||||
                                    WHEN 'KROGER' THEN '50802'
 | 
			
		||||
                                    WHEN 'OCEAN STATE JOBBERS' THEN '50802'
 | 
			
		||||
                                    WHEN 'AURORA WHOLESALE' THEN '50802'
 | 
			
		||||
                                    WHEN 'LEON KORRAL' THEN '50802'
 | 
			
		||||
                                    --all other retail goes to Doran Marable-----------
 | 
			
		||||
                                    ELSE '50200'
 | 
			
		||||
                                END
 | 
			
		||||
                            END
 | 
			
		||||
                            --minor group b52 goes to dedicated rep
 | 
			
		||||
                        ELSE
 | 
			
		||||
                            CASE WHEN i.MING = 'B52' THEN 
 | 
			
		||||
                                'PW'
 | 
			
		||||
                            --gdir, ndir go to bill-to rep
 | 
			
		||||
                            ELSE 
 | 
			
		||||
                                CASE WHEN bc.bvclas IN ('GDIR','NDIR') THEN 
 | 
			
		||||
                                    bc.bvsalm
 | 
			
		||||
                                ELSE
 | 
			
		||||
                                    sc.bvsalm
 | 
			
		||||
                                END
 | 
			
		||||
                            END
 | 
			
		||||
                        END
 | 
			
		||||
                    )
 | 
			
		||||
    LEFT OUTER JOIN lgdat.icstm im ON
 | 
			
		||||
        im.cgpart = b.part
 | 
			
		||||
        AND im.cgplnt = a.v6plnt
 | 
			
		||||
        AND im.cgplnt = i.dplt
 | 
			
		||||
    LEFT OUTER JOIN lgdat.icstp ip ON
 | 
			
		||||
        ip.chpart = b.part
 | 
			
		||||
        AND ip.chplnt = a.v6plnt
 | 
			
		||||
        AND ip.chplnt = i.dplt
 | 
			
		||||
    LEFT OUTER JOIN lgdat.icstr ir ON
 | 
			
		||||
        ir.y0part = b.part
 | 
			
		||||
        AND ir.y0plnt = a.v6plnt
 | 
			
		||||
        AND ir.y0plnt = i.dplt
 | 
			
		||||
    LEFT OUTER JOIN lgdat.plnt ON
 | 
			
		||||
        yaplnt = a.v6plnt
 | 
			
		||||
        yaplnt = i.dplt
 | 
			
		||||
    LEFT OUTER JOIN copr ON
 | 
			
		||||
        copr.comp = yacomp::text
 | 
			
		||||
    LEFT OUTER JOIN rlarp.ffcret cx ON
 | 
			
		||||
        cx.perd = '1910'
 | 
			
		||||
        cx.perd = '2008'
 | 
			
		||||
        AND cx.rtyp = 'MA'
 | 
			
		||||
        AND cx.fcur = copr.curr
 | 
			
		||||
        AND cx.tcur = 'US'
 | 
			
		||||
    LEFT OUTER JOIN rlarp.ffcret rx ON
 | 
			
		||||
        rx.perd = '1910'
 | 
			
		||||
        rx.perd = '2008'
 | 
			
		||||
        AND rx.rtyp = 'MA'
 | 
			
		||||
        AND rx.fcur = bc.bvcurr
 | 
			
		||||
        AND rx.tcur = 'US'
 | 
			
		||||
    LEFT OUTER JOIN LGDAT.ADRS AD ON
 | 
			
		||||
            AD.QZADR = plnt."yaadr#"
 | 
			
		||||
)
 | 
			
		||||
/*
 | 
			
		||||
,clone_part_meta AS (
 | 
			
		||||
    SELECT
 | 
			
		||||
        b.majg          --master data 
 | 
			
		||||
        ,b.ming          --master data 
 | 
			
		||||
        ,b.majs          --master data 
 | 
			
		||||
        ,b.mins          --master data 
 | 
			
		||||
        ,b.gldc          --master data 
 | 
			
		||||
        ,b.glec          --master data 
 | 
			
		||||
        ,b.harm          --master data 
 | 
			
		||||
        ,b.clss          --master data 
 | 
			
		||||
        ,b.brand          --master data 
 | 
			
		||||
        ,b.assc          --master data   
 | 
			
		||||
        ,b.segm     
 | 
			
		||||
        ,b.majg_descr
 | 
			
		||||
        ,b.ming_descr
 | 
			
		||||
        ,b.majs_descr
 | 
			
		||||
        ,b.mins_descr
 | 
			
		||||
        ,b.quota_rep
 | 
			
		||||
        ,sum(fb_val_loc * r_rate) agg
 | 
			
		||||
    FROM
 | 
			
		||||
        rlarp.osm_fcpool b
 | 
			
		||||
    WHERE
 | 
			
		||||
        -----------------scenario----------------------------
 | 
			
		||||
        where_clause
 | 
			
		||||
        --probably dont want to include adjustments that have blown away volume and good sources of dating info
 | 
			
		||||
        -----------------additional params-------------------
 | 
			
		||||
        AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
 | 
			
		||||
        AND adj_orderdate <= adj_shipdate
 | 
			
		||||
    GROUP BY
 | 
			
		||||
        b.majg          --master data 
 | 
			
		||||
        ,b.ming          --master data 
 | 
			
		||||
        ,b.majs          --master data 
 | 
			
		||||
        ,b.mins          --master data 
 | 
			
		||||
        ,b.gldc          --master data 
 | 
			
		||||
        ,b.glec          --master data 
 | 
			
		||||
        ,b.harm          --master data 
 | 
			
		||||
        ,b.clss          --master data 
 | 
			
		||||
        ,b.brand          --master data 
 | 
			
		||||
        ,b.assc          --master data   
 | 
			
		||||
        ,b.segm     
 | 
			
		||||
        ,b.majg_descr
 | 
			
		||||
        ,b.ming_descr
 | 
			
		||||
        ,b.majs_descr
 | 
			
		||||
        ,b.mins_descr
 | 
			
		||||
        ,b.quota_rep
 | 
			
		||||
    ORDER BY
 | 
			
		||||
        agg desc
 | 
			
		||||
)
 | 
			
		||||
*/
 | 
			
		||||
, ins AS (
 | 
			
		||||
    INSERT INTO rlarp.osm_fcpool SELECT * FROM final RETURNING *
 | 
			
		||||
    INSERT INTO rlarp.osm_pool SELECT * FROM final RETURNING *
 | 
			
		||||
)
 | 
			
		||||
,insagg AS (
 | 
			
		||||
SELECT
 | 
			
		||||
    bill_cust_descr
 | 
			
		||||
    ,billto_group
 | 
			
		||||
    ,ship_cust_descr
 | 
			
		||||
    ,shipto_group
 | 
			
		||||
    ,quota_rep_descr
 | 
			
		||||
    ,director_descr
 | 
			
		||||
    ,segm
 | 
			
		||||
    ,mod_chan
 | 
			
		||||
    ,mod_chansub
 | 
			
		||||
    ,majg_descr
 | 
			
		||||
    ,ming_descr
 | 
			
		||||
    ,majs_descr
 | 
			
		||||
    ,mins_descr
 | 
			
		||||
    ,brand
 | 
			
		||||
    ,part_family
 | 
			
		||||
    ,part_group
 | 
			
		||||
    ,branding
 | 
			
		||||
    ,color
 | 
			
		||||
    ,part_descr
 | 
			
		||||
    ,order_season
 | 
			
		||||
    ,order_month
 | 
			
		||||
    ,ship_season
 | 
			
		||||
    ,ship_month
 | 
			
		||||
    ,request_season
 | 
			
		||||
    ,request_month
 | 
			
		||||
    ,promo
 | 
			
		||||
    ,version
 | 
			
		||||
    ,iter
 | 
			
		||||
    ,sum(value_loc) value_loc
 | 
			
		||||
    ,sum(value_usd) value_usd
 | 
			
		||||
    ,sum(cost_loc) cost_loc
 | 
			
		||||
    ,sum(cost_usd) cost_usd
 | 
			
		||||
    ,sum(units) units
 | 
			
		||||
FROM
 | 
			
		||||
    ins
 | 
			
		||||
GROUP BY
 | 
			
		||||
    bill_cust_descr
 | 
			
		||||
    ,billto_group
 | 
			
		||||
    ,ship_cust_descr
 | 
			
		||||
    ,shipto_group
 | 
			
		||||
    ,quota_rep_descr
 | 
			
		||||
    ,director_descr
 | 
			
		||||
    ,segm
 | 
			
		||||
    ,mod_chan
 | 
			
		||||
    ,mod_chansub
 | 
			
		||||
    ,majg_descr
 | 
			
		||||
    ,ming_descr
 | 
			
		||||
    ,majs_descr
 | 
			
		||||
    ,mins_descr
 | 
			
		||||
    ,brand
 | 
			
		||||
    ,part_family
 | 
			
		||||
    ,part_group
 | 
			
		||||
    ,branding
 | 
			
		||||
    ,color
 | 
			
		||||
    ,part_descr
 | 
			
		||||
    ,order_season
 | 
			
		||||
    ,order_month
 | 
			
		||||
    ,ship_season
 | 
			
		||||
    ,ship_month
 | 
			
		||||
    ,request_season
 | 
			
		||||
    ,request_month
 | 
			
		||||
    ,promo
 | 
			
		||||
    ,version
 | 
			
		||||
    ,iter
 | 
			
		||||
    SELECT
 | 
			
		||||
        ---------customer info-----------------
 | 
			
		||||
        bill_cust_descr
 | 
			
		||||
        ,billto_group
 | 
			
		||||
        ,ship_cust_descr
 | 
			
		||||
        ,shipto_group
 | 
			
		||||
        ,quota_rep_descr
 | 
			
		||||
        ,director
 | 
			
		||||
        ,segm
 | 
			
		||||
        ,chan
 | 
			
		||||
        ,chansub
 | 
			
		||||
        ---------product info------------------
 | 
			
		||||
        ,majg_descr
 | 
			
		||||
        ,ming_descr
 | 
			
		||||
        ,majs_descr
 | 
			
		||||
        ,mins_descr
 | 
			
		||||
        --,brand
 | 
			
		||||
        --,part_family
 | 
			
		||||
        ,part_group
 | 
			
		||||
        ,branding
 | 
			
		||||
        --,color
 | 
			
		||||
        ,part_descr
 | 
			
		||||
        ---------dates-------------------------
 | 
			
		||||
        ,order_season
 | 
			
		||||
        ,order_month
 | 
			
		||||
        ,ship_season
 | 
			
		||||
        ,ship_month
 | 
			
		||||
        ,request_season
 | 
			
		||||
        ,request_month
 | 
			
		||||
        ,promo
 | 
			
		||||
        ,version
 | 
			
		||||
        ,iter
 | 
			
		||||
        --------values-------------------------
 | 
			
		||||
        ,sum(value_loc) value_loc
 | 
			
		||||
        ,sum(value_usd) value_usd
 | 
			
		||||
        ,sum(cost_loc) cost_loc
 | 
			
		||||
        ,sum(cost_usd) cost_usd
 | 
			
		||||
        ,sum(units) units
 | 
			
		||||
    FROM
 | 
			
		||||
        ins
 | 
			
		||||
    GROUP BY
 | 
			
		||||
        ---------customer info-----------------
 | 
			
		||||
        bill_cust_descr
 | 
			
		||||
        ,billto_group
 | 
			
		||||
        ,ship_cust_descr
 | 
			
		||||
        ,shipto_group
 | 
			
		||||
        ,quota_rep_descr
 | 
			
		||||
        ,director
 | 
			
		||||
        ,segm
 | 
			
		||||
        ,chan
 | 
			
		||||
        ,chansub
 | 
			
		||||
        ---------product info------------------
 | 
			
		||||
        ,majg_descr
 | 
			
		||||
        ,ming_descr
 | 
			
		||||
        ,majs_descr
 | 
			
		||||
        ,mins_descr
 | 
			
		||||
        --,brand
 | 
			
		||||
        --,part_family
 | 
			
		||||
        ,part_group
 | 
			
		||||
        ,branding
 | 
			
		||||
        --,color
 | 
			
		||||
        ,part_descr
 | 
			
		||||
        ---------dates-------------------------
 | 
			
		||||
        ,order_season
 | 
			
		||||
        ,order_month
 | 
			
		||||
        ,ship_season
 | 
			
		||||
        ,ship_month
 | 
			
		||||
        ,request_season
 | 
			
		||||
        ,request_month
 | 
			
		||||
        ,promo
 | 
			
		||||
        ,version
 | 
			
		||||
        ,iter
 | 
			
		||||
)
 | 
			
		||||
SELECT json_agg(row_to_json(insagg)) x from insagg
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user