global class oppbatch implements Database.Batchable<sObject> {
    public String query;

    global oppbatch() {
        
    }

    global oppbatch(String str) {
        this.query = str;
    }


    global Database.QueryLocator start(Database.BatchableContext bc) {
        if(query == null || query  == ''){
            return Database.getQueryLocator([select id,SyncedQuoteId from Opportunity ]);

        }else{
            return Database.getQueryLocator([select id,SyncedQuoteId from Opportunity where id =:query]);
        }
    }

    global void execute(Database.BatchableContext BC, list<Sobject> scope) {

        List<String> targetList = new List<String>();
        List<Opportunity> oppList = new List<Opportunity>();
        for(SObject s : scope){
            Opportunity opp = (Opportunity) s;
            oppList.add(opp);
            targetList.add(opp.id);
        }

        List<OpportunityLineItem> oliList = [select Id, ProductCode, ECCode__c, Quantity, OpportunityId, Opportunity.Amount from OpportunityLineItem where OpportunityId = :targetList order by OpportunityId, Id];
            Map<String, String> itemMap = new Map<String, String>();
           
            for (OpportunityLineItem oli : oliList) {
                if (itemMap.containsKey(oli.OpportunityId) == false) {
                    itemMap.put(oli.OpportunityId, oli.ProductCode + '|' + oli.Quantity);
                   
                } else {
                    String tmp = itemMap.get(oli.OpportunityId);
                    itemMap.put(oli.OpportunityId, tmp + ',\r\n' + oli.ProductCode + '|' + oli.Quantity);
                }
            }


            for (Opportunity newOpp : oppList) {
                //Opportunity oldOpp = oldMap.get(newOpp.Id);
                if (newOpp.SyncedQuoteId == null) {
                    newOpp.OpportunityLineItemOT_text__c = itemMap.get(newOpp.Id);
                }
            }

            if(oppList.size() > 0){
                update oppList;
            }
    }

    global void finish(Database.BatchableContext BC) {

    }

    public static void come(){
        Integer i = 1;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
    }
}